templates

WordPressでは、表示するページの種類に応じてテンプレートファイルが選択されます。

テンプレートの選択は、決められた階層ルールに従って行われます。
これについては、WordPress Codexにまとめられています。

テンプレート階層 – WordPress Codex 日本語版

この階層ルールはかなり細かく設定されているので、多くのケースはこの階層ルールで対応できるようになっています。

ただし、この階層ルールでも対応できない場合もあります。
例えば、個別投稿ページ(シングルページ)をカテゴリに応じて切り替えたい場合です。
こういった場合の方法をまとめてみました。

カテゴリ別の個別投稿テンプレートは無い

個別投稿ページ(シングルページ)のテンプレートは、3つの階層が定義されています。

  • single-{post_type}.php — 投稿タイプ毎の個別投稿
  • single.php —  個別投稿
  • index.php — 基本テンプレート

個別投稿のテンプレート、さらに投稿タイプ毎の個別投稿のテンプレートを扱う事ができます。
しかし同じ投稿タイプ(postなど)で、カテゴリ別のテンプレートを扱うことができません。

カテゴリは1記事に対して複数設定ができるので、カテゴリ別にテンプレートを分ける事ができないのは当然なのですが、1記事1カテゴリを原則として運用しているサイトであれば、カテゴリ別にテンプレートを用意したくなるかもしれません。
そんな場合、functions.phptemplate_includeフィルターを設定します。

テンプレートファイルを変更するフィルター関数

例として、newsというカテゴリの個別投稿ページでは、single-news.phpというテンプレートを使用するように設定します。

functions.phpに、以下のコードを追加します。

条件分岐タグのis_singlein_categoryを使用しています。
※条件分岐タグについては、記事: 便利な条件分岐タグまとめを参照
記事が複数のカテゴリに属している場合でも、そのうちの1つがnewsカテゴリであれば、single-news.phpがテンプレートとなります。

このコードは以下のページを参考にしました。

Plugin API/Filter Reference/template include « WordPress Codex