web-dev-qa-db-ja.com

Wordpressショートコード関数でエコーとリターンを使用

ショートコード関数のコンテンツを表示するには、echoreturnの両方が正常に機能することがわかりました。

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

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

知りたいのですが、どちらを使っても違いはありますか?もしそうなら、推奨されるものは何ですか?この場合、私は通常エコーを使用します。大丈夫ですか?

11
kabirbaidhya

エコーは特定のケースで機能する場合がありますが、絶対に使用しないでください。ショートコードは何も出力することを意図したものではなく、コンテンツのみを返す必要があります。

ショートコードに関するコーデックスからのメモは次のとおりです。

ショートコードによって呼び出される関数は、いかなる種類の出力も生成しないことに注意してください。ショートコード関数は、ショートコードを置き換えるために使用されるテキストを返す必要があります。出力を直接生成すると、予期しない結果が発生します。

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

23
Nathan Dawson

大量のコンテンツを出力する場合は、次を使用する必要があります。

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();
}

ショートコードで「echo」を使用すると、ショートコードが処理される場所に情報が表示されます。これは、必ずしも実際にショートコードを追加した場所であるとは限りません。 「return」を使用すると、ページ内でショートコードを追加した場所に正確に情報が返されます。

たとえば、画像、ショートコード、テキストの場合:
エコー:画像の上に出力されます
戻り値:画像の後、テキストの前(実際にショートコードを追加した場所)に出力されます

6
Kimberly Fox

違いは、echoは、関数を終了することなく、テキストをページに直接送信することです。 returnは関数を終了し、テキストを関数呼び出しに送り返します。

エコーの場合:

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

返品の場合:

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"
4
Anonymous

エコーとリターンが同じものであるというわけではありません。最初の関数でエコーが完了すると、何もすることが残っていないので、戻ります。

2番目のfxでは、明示的に関数を終了し、呼び出し元の関数に値を返します。

2
HashHazard

私は使うだろう:

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

次のようなことをしていると簡単です。

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

後で..

1
Bas Kuis