在短代码函数中使用回声与返回的Wordpress

2022-08-30 18:42:08

我注意到两者,并且可以很好地显示wordpress中短代码函数的内容。echoreturn

function foobar_shortcode($atts) {
    echo "Foo Bar"; //this works fine
}

function foobar_shortcode($atts) {
    return "Foo Bar"; //so does this
}

使用其中任何一个有什么区别吗?如果是,wordpress的推荐方法是什么?我通常在这种情况下使用 - 这可以吗?echo


答案 1

Echo可能适用于您的特定情况,但您绝对不应该使用它。短代码并不意味着输出任何内容,它们应该只返回内容。

以下是手抄本中关于短码的注释:

请注意,短代码调用的函数不应生成任何类型的输出。短代码函数应返回用于替换短代码的文本。直接产生输出将导致意外的结果。

http://codex.wordpress.org/Function_Reference/add_shortcode#Notes

输出缓冲

有时,您会遇到输出变得难以避免或繁琐的情况。例如,您可能需要调用一个函数来在短代码回调中生成一些标记。如果该函数要直接输出而不是返回值,则可以使用称为输出缓冲的技术来处理它。

输出缓冲将允许您捕获代码生成的任何输出并将其复制到字符串中。

启动缓冲区,并确保获取内容并在完成后将其删除, 。出现在两个函数之间的任何输出都将写入内部缓冲区。ob_start()ob_get_clean()

例:

function foobar_shortcode( $atts ) {
    ob_start();

    // any output after ob_start() will be stored in an internal buffer...
    example_function_that_generates_output();

    // example from original question - use of echo
    echo 'Foo Bar';

    // we can even close / reopen our PHP tags to directly insert HTML.
    ?>
        <p>Hello World</p>
    <?php

    // return the buffer contents and delete
    return ob_get_clean();
}
add_shortcode( 'foobar', 'foobar_shortcode' );

https://www.php.net/manual/en/function.ob-start.php


答案 2

如果要输出大量内容,则应使用:

add_shortcode('test', 'test_func');

function test_func( $args ) {
  ob_start();
  ?> 
  <!-- your contents/html/(maybe in separate file to include) code etc --> 
  <?php

  return ob_get_clean();
}

推荐