テーマファイルでショートコードを使いたい!WordPressのPHPにショートコードを埋め込む方法【備忘メモ】

テーマファイルでショートコードを使いたい!WordPressのPHPにショートコードを埋め込む方法【備忘メモ】

目次

    WordPressのショートコードをPHPファイルで使う方法

    WordPressのショートコードをPHPファイルで使う方法をメモしておく。テンプレートファイル(PHPファイル)内でショートコードを使いたい場合は、単純に[ショートコード]と書いてもダメ。PHPの関数で囲む必要がある。

    基本は以下の構文。これだけなんだけど、いざ必要になるとすぐ忘れるよね!

    <?php echo do_shortcode('[ショートコード]'); ?>

    これでPHPファイル内からもショートコードが使える。単純だけど便利。

    実際の使用シーン

    例えば、よく使うのはコンタクトフォームのショートコード。「Contact Form 7」のフォームを、テーマのテンプレートファイル内に直接埋め込みたい場合は以下のようにする。

    <div class="contact-section">
      <h2>お問い合わせ</h2>
      <?php echo do_shortcode('[contact-form-7 id="123" title="お問い合わせフォーム"]'); ?>
    </div>

    これで特定のテンプレートファイル(例えばfront-page.phppage-contact.phpなど)に直接フォームを埋め込める。管理画面でページ編集するより柔軟性が高い。

    パラメータを動的に渡す場合

    より応用的な使い方として、PHPの変数をショートコードのパラメータとして渡すこともできる。これが結構便利。

    <?php
    $post_id = get_the_ID();
    $form_id = get_post_meta($post_id, 'form_id', true);
    echo do_shortcode('[contact-form-7 id="' . $form_id . '" title="お問い合わせフォーム"]');
    ?>

    こんな感じで投稿ごとにカスタムフィールドに保存したフォームIDを取得して、動的にショートコードを生成することもできる。


    ショートコードを条件分岐と組み合わせる

    条件によってショートコードを出し分けるのも簡単。たとえば、ログインユーザーとそうでないユーザーで表示を変えたい場合。

    <?php
    if (is_user_logged_in()) {
      echo do_shortcode('[会員向けコンテンツ]');
    } else {
      echo do_shortcode('[ゲスト向けコンテンツ]');
    }
    ?>

    こういうことをすると、同じページでもログイン状態によって表示内容を切り替えられる。メンバーシップサイトとか会員制サイトを作る時に重宝する。

    変数を使った繰り返し処理

    繰り返し処理の中でショートコードを使う例。例えば投稿IDのリストがあって、それぞれの投稿に対してショートコードを実行したい場合。

    <?php
    $post_ids = array(1, 5, 9, 12);
    foreach ($post_ids as $id) {
      echo do_shortcode('[display_post id="' . $id . '"]');
    }
    ?>

    こんな風にループの中で動的にショートコードを生成できる。配列の中身を変えるだけで表示するコンテンツを簡単に変更できるから便利。

    ショートコードに関する豆知識

    ショートコードをPHPファイルで使う方法の他に、知っておくと便利なことをいくつかメモ。

    独自のショートコードを作る方法

    自分でショートコードを作るのも意外と簡単。functions.phpに以下のようなコードを追加するだけ。

    function my_custom_shortcode($atts) {
      $atts = shortcode_atts(array(
        'color' => 'blue',
        'size' => 'medium',
      ), $atts);
      
      return '<div class="custom-element" style="color: ' . $atts['color'] . '; font-size: ' . $atts['size'] . ';">カスタム要素</div>';
    }
    add_shortcode('custom_element', 'my_custom_shortcode');

    これで[custom_element color="red" size="large"]というショートコードが使えるようになる。パラメータも自由に設定できるから、柔軟性が高い。

    独自ショートコードは再利用性の高いコンポーネントを作る時にとても便利。共通パーツをすべてのページで簡単に使えるようになる。

    ショートコードの入れ子

    ショートコードの中に別のショートコードを入れることもできる。

    <?php echo do_shortcode('[outer_shortcode][inner_shortcode][/inner_shortcode][/outer_shortcode]'); ?>

    ただし、複雑になり過ぎると可読性が下がるし、デバッグも大変になる。個人的には2段階までにとどめておくのがベストだと思う。

    注意点:エスケープ処理

    ショートコードのパラメータに特殊文字(引用符など)を含める場合は、適切にエスケープする必要がある。特にJSONデータを渡す場合は注意。

    <?php
    $json_data = json_encode(array('name' => 'John', 'age' => 30));
    // JSONデータを適切にエスケープ
    $escaped_data = esc_attr($json_data);
    echo do_shortcode('[data_display json="' . $escaped_data . '"]');
    ?>

    esc_attr()esc_html()を使ってエスケープしておくと、予期せぬエラーを防げる。実際にこれでハマったことが何度かある。


    応用例:テンプレートパーツとショートコード

    get_template_part()とショートコードを組み合わせると、さらに柔軟なテーマ開発ができる。

    <?php
    // ショートコードの結果を変数に格納
    $shortcode_content = do_shortcode('[some_shortcode]');
    
    // 変数をセット
    set_query_var('shortcode_content', $shortcode_content);
    
    // テンプレートパーツを読み込む
    get_template_part('template-parts/content', 'shortcode');
    ?>

    そしてtemplate-parts/content-shortcode.phpの中で:

    <div class="template-part-wrapper">
      <h3>ショートコードコンテンツ</h3>
      <?php echo $shortcode_content; ?>
    </div>

    こうすると、ショートコードの出力結果をテンプレートパーツに渡して表示できる。コードの再利用性が高まって保守も楽になる。

    まとめ:PHPでショートコードを使うときのポイント

    • 基本構文は <?php echo do_shortcode('[ショートコード]'); ?>
    • パラメータを動的に生成することができる
    • 条件分岐と組み合わせることで柔軟な表示制御ができる
    • 特殊文字を含むパラメータは適切にエスケープする
    • テンプレートパーツと組み合わせるとさらに強力

    WordPressでサイトを作っていると、いつも同じことを調べることになる。特にショートコードの扱いは頻繁に必要になるので、一覧でメモしてみた。

    最後に一言:ショートコードは便利だけど、多用しすぎるとサイトのパフォーマンスに影響することも。本当に必要な場面で適切に使うのがベスト!

    次回は、独自ショートコードの作り方についてもう少し詳しく書こうと思う。今日はこれでおしまい。