WordPress PHPファイルをショートコードで呼び出す方法

WordPressで、記事や固定ページの中にPHPの動的なコンテンツを埋め込みたいと思ったことはありませんか? 通常、投稿エディタから直接PHPコードを記述することはできません。しかし、今回解説するショートコードを使えば、テーマ内のPHPファイルを簡単に読み込んで表示させることができます。

関数の概要

今回ご紹介するのは、以下のPHPコードによって実現される機能です。

function include_my_php($params = array()) { extract(shortcode_atts(array( 'file' => 'default' ), $params)); ob_start(); include(get_theme_root() . '/' . get_template() . "/template/$file.php"); return ob_get_clean();}add_shortcode('include_php', 'include_my_php');
PHP

このコードをWordPressテーマの functions.php ファイルに追加すると、[include_php] というショートコードが使えるようになります。このショートコードは、テーマディレクトリ内の特定のPHPファイルの内容を読み込み、その結果を出力します。

具体的には、以下の手順でファイルパスを解決します。

  1. get_theme_root(): WordPressのテーマが置かれているルートディレクトリのパスを取得します。(例: /var/www/html/wp-content/themes)
  2. get_template(): 現在アクティブなテーマのディレクトリ名を取得します。(例: my-theme
  3. /template/$file.php: アクティブなテーマディレクトリの直下にある template というサブディレクトリを探し、その中の $file という名前のPHPファイルを読み込みます。$file の値は、ショートコードで指定されなければ 'default' になります。

結果として、[include_php] と書けば wp-content/themes/あなたのテーマ名/template/default.php が、[include_php file="my-content"] と書けば wp-content/themes/あなたのテーマ名/template/my-content.php が読み込まれて表示される、という仕組みです。

具体的な使用例

それでは、このショートコードをどのように活用できるか見ていきましょう。

静的なコンテンツの使い回し

何度も繰り返し使う共通のHTMLブロックがある場合、それをPHPファイルとして保存し、ショートコードで呼び出すことができます。

例: 著作権表示やアフィリエイトの免責事項など。

1.テーマディレクトリ内に template フォルダを作成します。
2.template フォルダ内に copyright.php というファイルを作成し、以下の内容を記述します。

<p>© <?php echo date('Y'); ?> あなたの会社名. All Rights Reserved.</p>
PHP

3.WordPressの投稿や固定ページで、この情報を表示したい場所に次のように記述します。

[include_php file="copyright"]
HTML

動的なコンテンツの表示

PHPの強みは、サーバー側で動的にコンテンツを生成できる点です。これを活用して、特定の情報やデータに基づいたコンテンツを表示できます。

例: サイト訪問者数、最新の投稿リスト、特定のカスタムフィールド値など。

1.template フォルダ内に latest-posts.php というファイルを作成し、以下の内容を記述します。(例として最新の3つの投稿を表示)

<?php$args = array( 'posts_per_page' => 3, 'orderby' => 'date', 'order' => 'DESC',);$latest_posts = new WP_Query($args);if ($latest_posts->have_posts()) : ?> <h3>最新の記事</h3> <ul> <?php while ($latest_posts->have_posts()) : $latest_posts->the_post(); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endwhile; ?> </ul> <?php wp_reset_postdata(); ?><?php else : ?> <p>まだ記事がありません。</p><?php endif;?>
PHP

2.WordPressの投稿や固定ページで、最新記事リストを表示したい場所に次のように記述します。

[include_php file="latest-posts"]
HTML

カスタムフィールドと組み合わせる

特定のページに特化した情報(例: イベント情報、商品詳細など)をカスタムフィールドで管理し、それをPHPファイルで取得して表示することができます。

例: イベント詳細ページで、イベントの日付や場所を表示。

1.Advanced Custom Fields (ACF) などのプラグインを使って、投稿タイプに event_dateevent_location というカスタムフィールドを作成します。
2.template フォルダ内に event-details.php というファイルを作成し、以下の内容を記述します。

<?php$event_date = get_field('event_date');$event_location = get_field('event_location');if ($event_date && $event_location) : ?> <div class="event-info"> <p><strong>開催日:</strong> <?php echo esc_html($event_date); ?></p> <p><strong>場所:</strong> <?php echo esc_html($event_location); ?></p> </div><?php endif; ?>
PHP

3.イベント詳細を表示したい投稿や固定ページで、カスタムフィールドに値を入力し、以下のショートコードを記述します。

[include_php file="event-details"]
HTML

応用例

このショートコードの仕組みは、さらに応用することで様々な可能性が広がります。

1. A/Bテストの実施

異なるコンテンツパターンを複数のPHPファイルに作成し、条件分岐を使って表示を切り替えることができます。

  • template/pattern-a.php
  • template/pattern-b.php

ショートコードの代わりに、PHPコード内で直接条件分岐(例: ユーザーのセッション情報やランダムな選択)に基づいて適切なファイルを読み込むようにカスタマイズできます。

2. ユーザーロールに応じたコンテンツ表示

ログインしているユーザーの役割(管理者、購読者など)に基づいて、異なるコンテンツを表示することも可能です。

  • template/admin-content.php (管理者のみに表示)
  • template/subscriber-content.php (購読者のみに表示)

関数内で current_user_can() などのWordPress関数を使って、表示するPHPファイルを動的に変更できます。

3. 複雑なレイアウトの管理

WordPressのブロックエディタや従来のビジュアルエディタだけでは実現が難しい複雑なレイアウトを、PHPファイルで記述し、ショートコードで呼び出すことで対応できます。これにより、HTMLとPHPを直接制御して、より柔軟なデザインを実現できます。

まとめ

この include_my_php 関数と include_php ショートコードは、WordPressサイトの柔軟性を大幅に向上させる強力なツールです。静的なコンテンツの再利用から動的なデータの表示、さらには複雑なレイアウトや条件付きコンテンツの管理まで、様々な場面で活用できます。

read next