ショートコードをdo_shortcodeで呼び出しても画面に何も表示されないとき
WordPressのfunctions.phpなどに定義したショートコードをテンプレートの中で呼び出すときは「do_shortcode」を使います。
ただし、ショートコードの仕様によっては次のようにdo_shortcodeで呼び出しても画面に何も表示されない場合があります。
<?php do_shortcode('[showx]'); ?>
その場合、do_shortcodeの前に「echo 」を追加してみてください。
<?php echo do_shortcode('[showx]'); ?>
「echo」は画面に文字を表示するためのPHPの命令です。ショートコードの内容を画面に表示するときにも使えます。
また、単純ミスの話ですが、次のように角括弧を消してショートコードを呼び出そうとしてもうまくいきません。
<?php do_shortcode('showx'); ?>
前述のように角括弧付きのショートコードを do_shortcodeで呼び出すようにしてください。
ショートコードの中で「echo」してもうまくいかない
上記のdo_shortcodeで「echo」を省略できるように、functions.phpに定義するショートコードの中でecho(内容を出力)しようと考えないでください。ショートコードの内容は意図しない場所に表示されてしまいます。
同じような理由で、ショートコードの中で、テンプレートを読み込んで表示するget_template_partのような命令を使うとうまくいきません。
たとえば、次のショートコードはテンプレートファイル「show.php」を読み込んで表示しようとしていますが、その内容は意図しない場所に表示されてしまいます。
/* うまくいかないショートコードのget_template_part */ function showx() { return get_template_part('show'); } add_shortcode('showx', 'showx');
その場合、内容をいきなり出力せずにob_startでバッファリングするように設定して、最後にob_get_cleanなどで表示すればうまくいきます。
/* 内容をバッファリングして最後に出力 */ function showx() { ob_start(); // バッファを有効に get_template_part('show'); return ob_get_clean(); // バッファを出力 } add_shortcode('showx', 'showx');
do_shortcodeから話がそれましたが、ショートコードの取り扱いでうまくいかないときの参考にしてください。