【WordPress】テーマのPHPからショートコードを呼び出す方法

【WordPress】テーマのPHPからショートコードを呼び出す方法 WordPress

WordPress では、記事や固定ページ内で [shortcode] のように記述することで機能を呼び出せる「ショートコード」が用意されています。これをテーマファイル(例:single.phppage.php)内で直接呼び出したいケースもあります。その際は do_shortcode() 関数を利用します。

スポンサーリンク

基本的な使い方

<?php
echo do_shortcode('');
?>

このように書くと、記事内に書いたときと同じようにショートコードが処理され、ギャラリーが表示されます。

変数を渡してショートコードを呼び出す

PHP 内で変数を使いたい場合は、文字列連結でショートコードを組み立てます。

<?php
$post_id = get_the_ID();
echo do_shortcode('

エラー: コンタクトフォームが見つかりません。

'); ?>

ショートコードの出力を変数に代入する

do_shortcode() は文字列を返すため、一度変数に代入して整形してから出力することもできます。

<?php
$content = do_shortcode('[my_shortcode param="value"]');
echo '<div class="shortcode-wrapper">' . $content . '</div>';
?>

関数内でショートコードを利用する

テーマの関数にショートコードを組み込みたいときも、同様に do_shortcode() を呼び出せます。

<?php
function my_theme_shortcode_output() {
  return do_shortcode('[recent-posts]');
}
?>

よくある質問(FAQ)

Q. PHP/テンプレートからショートコードを実行して出力するには?
A. do_shortcode(‘[shortcode_name attr=”value”]’)でショートコードを実行し、戻り値のHTMLをechoします。ループ外でも使用でき、第2引数にtrueを渡すとWPAutopフィルターが適用されます。
Q. 条件に応じてショートコードを動的に生成して実行するには?
A. PHPで$shortcode = ‘[my_sc count=”‘ . $count . ‘”]’;という形でショートコード文字列を動的に組み立て、do_shortcode($shortcode)で実行します。属性値はesc_attr()でエスケープします。
Q. ショートコードの内容をキャッシュするには?
A. Transients APIを使って最初の実行結果をset_transient()でキャッシュし、以降はget_transient()から返します。記事更新時にdelete_transient()でキャッシュを削除するsave_postフックも追加します。

まとめ

  • do_shortcode('[shortcode]') を使えばテーマ内から呼び出せる
  • 変数を埋め込みたいときは文字列連結で組み立てる
  • 返り値は文字列なので、ラップ用の HTML と組み合わせて使うと便利

ショートコードをテーマ内から呼び出せば、管理画面から入力するだけでなく、PHP テンプレート上でも柔軟に再利用できます。