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

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

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

スポンサーリンク

基本的な使い方

single.php等:基本の呼び出し
<?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() を呼び出せます。

functions.php:関数内での利用
<?php
function my_theme_shortcode_output() {
  return do_shortcode('[recent-posts]');
}
?>

よくある質問(FAQ)

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

まとめ

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

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