【WordPress】子テーマ使用時にショートコードで子テーマ内のテンプレートを読み込む場合

2016年5月11日

固定ページの任意の箇所でPHPファイルを実行したかったので、お馴染みのショートコードで対応しました。

まず、以下のコードを子テーマディレクトリに用意した「functions.php」に記載し、子テーマディレクトリ内に「myphpfiles」というフォルダを作成し、その中に読み込みたいPHPファイル(test.php)を作成しました。

function Include_my_php($params = array()) {
    extract(shortcode_atts(array(
        'file' => 'default'
    ), $params));
    ob_start();
    include(get_theme_root() . '/' . get_template() . "/myphpfiles/$file.php");
    return ob_get_clean();
}  

add_shortcode('myphp', 'Include_my_php'); 

これで固定ページの挿入したい箇所に、[myphp file=’test’]と入れてみたのですが、test.phpの内容は表示されず。

原因は単純に親テーマのディレクトリを参照してしまっているからです。

では子テーマのディレクトリを参照するにはどうすれば良いかというと、上記の6行目「include(get_theme_root() . ‘/’ . get_template() . “/myphpfiles/$file.php”);」の部分を「get_template_part(“/myphpfiles/$file”);」に変更します。

以下変更したもの。

function Include_my_php($params = array()) {
    extract(shortcode_atts(array(
        'file' => 'default'
    ), $params));
    ob_start();
    get_template_part("/myphpfiles/$file");
    return ob_get_clean();
}  

add_shortcode('myphp', 'Include_my_php'); 

これで子テーマディレクトリ内の「myphpfiles」を参照してくれるようになり、中にあるtest.phpが[myphp file=’test’]を配置した箇所に挿入されるようになりました。