もうダメポ
この記事の所要時間: 212

昨日、ショートコード作ったけど思った場所に表示されない!という質問があったので回答しました。

ああ、単純な話で
echo したんじゃないかな?
答えは return なんですよ

サンプルショートコード

サンプルコード見るとこうなっています。

// [foobar]
function foobar_func( $atts ){
	return "foo and bar";
}
add_shortcode( 'foobar', 'foobar_func' );

…たしかに foobar_func 関数の中で

return してますよね。

HTML出力しようとしてみましょう

ちょっとHTML足しちゃうと…

// [foobar]
function foobar_func( $atts ){
?>
<table>
<tr><th>名前</th><th>住所</th></tr>
<tr>
<td>さとーさん</td>
<td>にっぽんのどこか</td>
</tr>
</table>
<?php 
}
add_shortcode( 'foobar', 'foobar_func' );

こういうコードになりがちです。

すると return していないんです。

厳密に言うと echo してるんですね。

これだとだめです。

echo ではなく return

echo してると、echo だけに…

出ますよ。どこかには(笑)

これが正解

この場合は下記のようにします。

// [foobar]
function foobar_func( $atts ){
ob_start();
?>
<table>
<tr><th>名前</th><th>住所</th></tr>
<tr>
<td>さとーさん</td>
<td>にっぽんのどこか</td>
</tr>
</table>
<?php 
$html = ob_get_contents();
ob_end_clean();
return $html;
}
add_shortcode( 'foobar', 'foobar_func' );

こんな感じです。

一旦バッファに出力したものをためて return !

これでOK!

この記事が気に入ったら
いいね ! しよう

Twitter で