テンプレート階層(テンプレートが表示される優先順位)のまとめ

テンプレート階層とは、WordPressがどのテンプレートを使って表示するか、その優先順位を決めているルールみたいなものです。
該当するテンプレートがなければ、最終的に「index.php」を使います。
ですので「index.php」さえあれば問題ないわけですが、やっぱり問題はありますよね。
同じ機能を持つテンプレートがあると、優先順位の低いテンプレートは使われないままだったりします。
そんな不必要なテンプレートまで修正・更新してしまうこともあり、それはとても無駄な作業です。
そんなことが起こらないように、テンプレート階層の優先順位をまとめてみました。

トップページの優先順位

WordPressのトップページは、設定の「ホームページの設定」から「最新の投稿」と「固定ページ」を選ぶことができるので、それぞれの優先順位を紹介します。

「最新の投稿」が選択されている場合

1front-pae.phpトップページ専用のテンプレート
2home.php投稿一覧ページ専用のテンプレート
3index.php

「固定ページ」が選択されている場合

1front-pae.phpトップページ専用のテンプレート
2page-[slug].phpスラッグ名専用テンプレート
※[slug]は固定ページのスラッグです
3page-[ID].php投稿ID専用の固定ページテンプレート
※[ID]は固定ページの投稿IDのことです
4page.php固定ページ共通のテンプレート
5singular.php固定ページ・個別投稿ページ共通テンプレート
6index.php

固定ページの優先順位

1page-[slug].phpスラッグ名専用テンプレート
※[slug]は固定ページのスラッグです
2page-[ID].php投稿ID専用の固定ページテンプレート
※[ID]は固定ページの投稿IDのことです
3page.php固定ページ共通のテンプレート
4singular.php固定ページ・個別投稿ページ共通テンプレート
5index.php

個別投稿ページの優先順位

1single-[post_type].php投稿タイプ専用の個別ページテンプレート
※[post_type]は投稿タイプのslugです
※通常の投稿ならslugは「post」、カスタム投稿ならそのslug
2single.php個別投稿ページ共通テンプレート
3singular.php固定ページ・個別投稿ページ共通テンプレート
4index.php

カテゴリー別一覧ページの優先順位

1category-[slug].phpカテゴリーのターム専用のテンプレート
※[slug]はタームのスラッグです
2category-[ID].phpタームID専用のテンプレート
※[ID]はタームのタームIDのことです
3category.phpカテゴリー共通のテンプレート
4archive.php投稿一覧ページ共通テンプレート
5index.php

タグ別一覧ページの優先順位

1tag-[slug].phpタグのターム専用のテンプレート
※[slug]はタームのスラッグです
2tag-[ID].phpタームID専用のテンプレート
※[ID]はタームのタームIDのことです
3tag.phpタグ共通のテンプレート
4archive.php投稿一覧ページ共通テンプレート
5index.php

日付別一覧ページの優先順位

1date.php日付共通のテンプレート
2archive.php投稿一覧ページ共通テンプレート
3index.php

カスタムタクソノミー(カスタム分類)一覧の優先順位

1taxonomy-[taxonomy]-[term].phpあるタクソノミー内の1つのターム専用のテンプレート
※[taxonomy][term]にはそれぞれのスラッグを指定します
2taxonomy-[taxonomy].phpあるタクソノミー専用のテンプレート
3taxonomy.phpタクソノミー別共通テンプレート
4archive.php投稿一覧ページ共通テンプレート
5index.php

色々な場所でいってますが、WorsPressデフォルトの「カテゴリー」「タグ」もタクソノミーのひとつなのです。
この理屈からいえば、「category.php」は「taxonomy-category.php」「tag.php」は「taxonomy-post_tag.php」であるはずです。
しかしなぜか、これでは動作しません。
「taxonomy.php」でも「カテゴリー」「タグ」は表示されませんでした。
「カスタムタクソノミー」と「カテゴリー」「タグ」を共通のテンプレートにしたいときは、「archive.php」以下のテンプレートを使わなければなりません。

投稿タイプ別一覧ページの優先順位

1archive-[post_type].php投稿タイプ専用の一覧ページテンプレート
※[post_type]は投稿タイプのslugです
※通常の投稿ならslugは「post」、カスタム投稿ならそのslug
2archive.php投稿一覧ページ共通テンプレート
3index.phpp

検索結果の一覧ページの優先順位

1search.php検索結果専用の一覧ページテンプレート
2index.php

簡単な具体例

ざっと書いてきましたが、簡単な具体例で少し説明したいと思います。

■base
singular.php
index.php

例えば上記のように「singular.php」で固定ページと個別投稿ページを表示させていたとします。

■ex1
page.php ← 追加
singular.php
index.php

ここに固定ページ専用の「page.php」を追加すると、固定ページは「page.php」が優先されるので「singular.php」は固定ページには使われないが、個別投稿ページに使われます。

逆に「page.php」ではなく「single.php」を追加してみます。

■ex2
single.php ← 追加
singular.php
index.php

すると今度は「singluar.php」は個別投稿ページには適用されないが、固定ページには適用されます。

では、「page.php」と「single.php」の両方を追加したとしましょう。

■ex3
page.php ← 追加
single.php ← 追加
singular.php
index.php

こうなると、固定ページは「page.php」を、個別投稿ページは「single.php」をそれぞれ優先するので、「singular.php」は使われなくなります。
なので、削除してしまっても問題ありません。

■ex4
page.php
single.php
index.php
singular.php ← 削除

ここで見てきた、どのケースもきちんと動作します。
どれが間違いで、どれが正解とかはありません。
個人的には「base」「ex4」の構成にします。

  • 「singular.php」で対応できなくなったら「page.php」「sngle.php」に分ける。
  • 「page.php」「single.php」がほぼ一緒のソースなら「singular.php」にまとめる。

こんな考え方でいいと思います。

最後に

今回はテンプレート階層の優先順位をまとめてみました。

「このテンプレートは必要だ」
「あのテンプレートがあるから、このテンプレートは必要ない」

テーマを作る上でテンプレートの構成はとても重要です。
自分で使いやすい分かりやすいテーマを作りましょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です