WordPressで子テーマ使用時にショートコードで記事本文中に任意のテンプレートを読み込む方法
最近はメインサイトもサテライトサイトもほとんどWordPressで構築しています。
そういうこともあって何かとWordPressを触っている日々を過ごしているわけですけども、先日ちょっとハマったことがあったんですね。
固定ページ・投稿ページの任意の場所へphpファイルを読み込むってことを
結構頻繁にやるのですが、基本的には下記のソースで事が足りるわけです。
1 2 3 4 5 6 7 8 9 10 |
get_template_part(); //()カッコ内に読み込むファイル名を入れます //例えばsample.phpファイルを読み込みたい時は get_template_part('sample'); //sample-file.phpファイルを読み込みたい時は get_template_part('sample','file'); |
ただ、これを固定ページ(page.php)や投稿ページ(single.php)へ直接書いてしまうと
全投稿ページ・固定ページへ反映されてしまうことになります。
「じゃあ分岐しちゃえば?」
確かにそうなんですが、その方法だと各記事本文の前か後にしか挿入できないんです。
となると本文中にショートコードを使って読み込んでやるという方法しか選択肢がなくなってきます。
で、いろいろ調べてみるとあるんですね方法が。
一番多く見受けられたものがこちらの方法でした。
1.functions.phpに以下を記述
1 2 3 4 5 6 7 8 9 10 11 |
function Include_my_php($params = array()) { extract(shortcode_atts(array( 'file' => 'default' ), $params)); ob_start(); include(get_theme_root() . '/' . get_template() . "/$file.php"); return ob_get_clean(); } add_shortcode('myphp', 'Include_my_php'); |
2.読み込みたいphpファイルをショートコードで指定
1 2 3 4 5 |
[myphp file='ファイル名'] //sample.phpファイルを読み込む場合は [myphp file='sample'] |
以上でOKのはずなんですが…
テンプレートが読み込めず何にも表示されず…
「何でやねん」と思って調べてみると
get_template()がどうやらダメっぽかったんです。
何がダメかというと
get_template()は親テーマのディレクトリを返してしまうから。
WordPressを使用する時は必ずといっていいほど子テーマを使用しているので
親テーマのディレクトリが返ってくるのは都合が悪いわけです。
ということで親テーマのディレクトリではなく子テーマのディレクトリを返すように
イジったものがこちらです。
1 2 3 4 5 6 7 8 9 10 11 12 |
function Include_my_php($params = array()) { extract(shortcode_atts(array( 'file' => 'default' ), $params)); ob_start(); get_template_part($file); return ob_get_clean(); } add_shortcode('myphp', 'Include_my_php'); //コードに誤りがありましたので修正しました |
7行目をget_template_part($file);に変更しただけです。
あとは上記で説明した通り、ファイルを読み込みたい場所で[myphp file=’ファイル名’]と挿れてやればOKです。
function.phpに一度書けばどのページでも使えるのでめちゃくちゃ楽になります。
テンプレートをわざわざイジるほどでもなく、部分的に別テンプレートを
挿れたい場面は結構あるかと思いますのでぜひ活用してみてください。
ディスカッション
コメント一覧
まだ、コメントがありません