テンプレート階層とは、WordPressがどのテンプレートを使って表示するか、その優先順位を決めているルールみたいなものです。
該当するテンプレートがなければ、最終的に「index.php」を使います。
ですので「index.php」さえあれば問題ないわけですが、やっぱり問題はありますよね。
同じ機能を持つテンプレートがあると、優先順位の低いテンプレートは使われないままだったりします。
そんな不必要なテンプレートまで修正・更新してしまうこともあり、それはとても無駄な作業です。
そんなことが起こらないように、テンプレート階層の優先順位をまとめてみました。
トップページの優先順位
WordPressのトップページは、設定の「ホームページの設定」から「最新の投稿」と「固定ページ」を選ぶことができるので、それぞれの優先順位を紹介します。
「最新の投稿」が選択されている場合
1 | front-pae.php | トップページ専用のテンプレート |
2 | home.php | 投稿一覧ページ専用のテンプレート |
3 | index.php |
「固定ページ」が選択されている場合
1 | front-pae.php | トップページ専用のテンプレート |
2 | page-[slug].php | スラッグ名専用テンプレート ※[slug]は固定ページのスラッグです |
3 | page-[ID].php | 投稿ID専用の固定ページテンプレート ※[ID]は固定ページの投稿IDのことです |
4 | page.php | 固定ページ共通のテンプレート |
5 | singular.php | 固定ページ・個別投稿ページ共通テンプレート |
6 | index.php |
固定ページの優先順位
1 | page-[slug].php | スラッグ名専用テンプレート ※[slug]は固定ページのスラッグです |
2 | page-[ID].php | 投稿ID専用の固定ページテンプレート ※[ID]は固定ページの投稿IDのことです |
3 | page.php | 固定ページ共通のテンプレート |
4 | singular.php | 固定ページ・個別投稿ページ共通テンプレート |
5 | index.php |
個別投稿ページの優先順位
1 | single-[post_type].php | 投稿タイプ専用の個別ページテンプレート ※[post_type]は投稿タイプのslugです ※通常の投稿ならslugは「post」、カスタム投稿ならそのslug |
2 | single.php | 個別投稿ページ共通テンプレート |
3 | singular.php | 固定ページ・個別投稿ページ共通テンプレート |
4 | index.php |
カテゴリー別一覧ページの優先順位
1 | category-[slug].php | カテゴリーのターム専用のテンプレート ※[slug]はタームのスラッグです |
2 | category-[ID].php | タームID専用のテンプレート ※[ID]はタームのタームIDのことです |
3 | category.php | カテゴリー共通のテンプレート |
4 | archive.php | 投稿一覧ページ共通テンプレート |
5 | index.php | |
タグ別一覧ページの優先順位
1 | tag-[slug].php | タグのターム専用のテンプレート ※[slug]はタームのスラッグです |
2 | tag-[ID].php | タームID専用のテンプレート ※[ID]はタームのタームIDのことです |
3 | tag.php | タグ共通のテンプレート |
4 | archive.php | 投稿一覧ページ共通テンプレート |
5 | index.php | |
日付別一覧ページの優先順位
1 | date.php | 日付共通のテンプレート |
2 | archive.php | 投稿一覧ページ共通テンプレート |
3 | index.php | |
カスタムタクソノミー(カスタム分類)一覧の優先順位
1 | taxonomy-[taxonomy]-[term].php | あるタクソノミー内の1つのターム専用のテンプレート ※[taxonomy][term]にはそれぞれのスラッグを指定します |
2 | taxonomy-[taxonomy].php | あるタクソノミー専用のテンプレート |
3 | taxonomy.php | タクソノミー別共通テンプレート |
4 | archive.php | 投稿一覧ページ共通テンプレート |
5 | index.php |
色々な場所でいってますが、WorsPressデフォルトの「カテゴリー」「タグ」もタクソノミーのひとつなのです。
この理屈からいえば、「category.php」は「taxonomy-category.php」「tag.php」は「taxonomy-post_tag.php」であるはずです。
しかしなぜか、これでは動作しません。
「taxonomy.php」でも「カテゴリー」「タグ」は表示されませんでした。
「カスタムタクソノミー」と「カテゴリー」「タグ」を共通のテンプレートにしたいときは、「archive.php」以下のテンプレートを使わなければなりません。
投稿タイプ別一覧ページの優先順位
1 | archive-[post_type].php | 投稿タイプ専用の一覧ページテンプレート ※[post_type]は投稿タイプのslugです ※通常の投稿ならslugは「post」、カスタム投稿ならそのslug |
2 | archive.php | 投稿一覧ページ共通テンプレート |
3 | index.phpp |
検索結果の一覧ページの優先順位
1 | search.php | 検索結果専用の一覧ページテンプレート |
2 | index.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」にまとめる。
こんな考え方でいいと思います。
最後に
今回はテンプレート階層の優先順位をまとめてみました。
「このテンプレートは必要だ」
「あのテンプレートがあるから、このテンプレートは必要ない」
テーマを作る上でテンプレートの構成はとても重要です。
自分で使いやすい・分かりやすいテーマを作りましょう。