ショートコードを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から話がそれましたが、ショートコードの取り扱いでうまくいかないときの参考にしてください。