[WordPress]記事ページやアーカイブで別ディレクトリにあるテンプレートを読み込ませる

  • 更新日:
  • 公開日:

記事ページやアーカイブ、そのほかにも固定ページやカスタム投稿タイプなど諸々のページで、自分で用意したテンプレートを読み込ませる方法について。

普通は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をカスタマイズするなら絶対覚えておきたい条件分岐やカスタム投稿タイプなどいろいろ』が見やすくて参考になるのでオススメです。

書いた人

Symbol Mark

Ryoichi(しつ)

除菌ティッシュを買い込んで使いきれずによく乾かす人。

療養目的で退職し、どうやって生きていくか模索中。最近は勉強目的でLaravelやVue.js弄ったり、趣味で音で遊んでます。

※2019年10月16日現在ブログリニューアル中です。崩れなどが発生していたらすみません。

うぇぶ: @s_ryone