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

固定ページの任意の箇所で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'); 

これで固定ページの挿入したい箇所に、
Warning: include(/home/naoi11/public_html/a-side-job.com/wp-content/themes/step8-3/short_code/test.php) [function.include]: failed to open stream: No such file or directory in /home/naoi11/public_html/a-side-job.com/wp-content/themes/step8-3/functions.php on line 324

Warning: include() [function.include]: Failed opening '/home/naoi11/public_html/a-side-job.com/wp-content/themes/step8-3/short_code/test.php' for inclusion (include_path='.:/usr/lib/php') in /home/naoi11/public_html/a-side-job.com/wp-content/themes/step8-3/functions.php on line 324
と入れてみたのですが、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が
Warning: include(/home/naoi11/public_html/a-side-job.com/wp-content/themes/step8-3/short_code/test.php) [function.include]: failed to open stream: No such file or directory in /home/naoi11/public_html/a-side-job.com/wp-content/themes/step8-3/functions.php on line 324

Warning: include() [function.include]: Failed opening '/home/naoi11/public_html/a-side-job.com/wp-content/themes/step8-3/short_code/test.php' for inclusion (include_path='.:/usr/lib/php') in /home/naoi11/public_html/a-side-job.com/wp-content/themes/step8-3/functions.php on line 324
を配置した箇所に挿入されるようになりました。

シェアしていただけますと嬉しいです! 

« »