記事ページやアーカイブ、そのほかにも固定ページやカスタム投稿タイプなど諸々のページで、自分で用意したテンプレートを読み込ませる方法について。
普通はWordPressテーマフォルダにsingle.phpやarchive.phpといった名前のファイルを置くのですが、例えばプラグインフォルダの中に置いた独自テンプレートを読み込ませたい場合ですね。テーマフォルダではなく別の場所にあるので自動的に読み込んでくれません。
かなり限定的ですが、自分がやりたい処理だったのでメモ。
テンプレートファイルで別ディレクトリにあるテンプレートを読み込ませる
処理内容はとっても単純、template_include
フィルターに関数をフックして、if文で処理します。引数$template
にはURLに適したテンプレートのパスが渡ってきます。
例えばWordPress公式テンプレートのTwenty Fourteenの記事ページで引数をダンプすると「/{wordpressまでのパス}/wp-content/themes/twentyfourteen/single.php」となっています。
function my_template_include( $template ) {
if ( is_single() ) {
$template = dirname( __FILE__ ) . '/inc/my_single_template.php';
}
return $template;
}
add_filter( 'template_include', 'my_template_include' );
上のコードは自作プラグインで実行したときの場合ですが、3行目でプラグインフォルダにある「inc/my_single_template.php」を指定し、それを返しています。これだけで任意のテンプレートが読み込まれるようになります。
アーカイブやカスタム投稿タイプで同じようにテンプレートを変更したい場合は、2行目のif文をそれぞれの条件分岐タグに変えます。条件分岐タグはこちらのページ『WordPressをカスタマイズするなら絶対覚えておきたい条件分岐やカスタム投稿タイプなどいろいろ』が見やすくて参考になるのでオススメです。