Wordpress using echo vs return in shortcode function

后端 未结 6 2067
我在风中等你
我在风中等你 2021-01-01 22:07

I just noticed, both echo and return works fine for displaying content from a shortcode function in wordpress.

function foobar_short         


        
相关标签:
6条回答
  • 2021-01-01 22:18

    If you use "echo" in the shortcode, the information will show up wherever the shortcode is processed, which isn't necessarily where you actually added the shortcode. If you use "return", the information will return exactly where you added the shortcode within the page.

    For example, if you have an image, then shortcode, then text:
    Echo: will output above the image
    Return: will output after the image and before the text (where you actually added the shortcode)

    0 讨论(0)
  • 2021-01-01 22:25

    The difference is that echo sends the text directly to the page without the function needing to end. return both ends the function and sends the text back to the function call.

    For echo:

    function foobar_shortcode($atts) {
        echo "Foo"; // "Foo" is echoed to the page
        echo "Bar"; // "Bar" is echoed to the page
    }
    $var = foobar_shortcode() // $var has a value of NULL
    

    For return:

    function foobar_shortcode($atts) {
        return "Foo"; // "Foo" is returned, terminating the function
        echo "Bar"; // This line is never reached
    }
    $var = foobar_shortcode() // $var has a value of "Foo"
    
    0 讨论(0)
  • 2021-01-01 22:25

    Its not that echo and return are the same thing.. it's just that once the echo completes in your first function there is nothing left to do... so it returns..

    In the second fx your are explicitly exiting the function and returning the value back to the calling function.

    0 讨论(0)
  • 2021-01-01 22:29

    I would use:

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

    It is easier when you're doing things like:

    $output = '<div class="container">' . do_shortcode('foobar') . '</div>';
    echo $ouput;
    

    Later on..

    0 讨论(0)
  • 2021-01-01 22:31

    Echo may work in your specific case but you definitely shouldn't use it. Shortcodes aren't meant to output anything, they should only return content.

    Here's a note from the codex on shortcodes:

    Note that the function called by the shortcode should never produce output of any kind. Shortcode functions should return the text that is to be used to replace the shortcode. Producing the output directly will lead to unexpected results.

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

    0 讨论(0)
  • 2021-01-01 22:33

    If you are outputting a lot of contents, then you should use:

    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();
    }
    
    0 讨论(0)
提交回复
热议问题