WordPressのテンプレート階層の仕組み ~テンプレート階層と表示の優先順位を解説~

2023年5月22日

目次

WordPressのテンプレートの仕組み

WordPressはWebサイトにテーマを適用させることで、Webサイトの見た目をカスタマイズできるようになっています。テーマは複数のPHPファイルやCSSファイル、JavaScriptファイルから構成されており、アクセスされたWebページのURLに応じて、使用されるテーマのファイルが自動的に選択されます。

テーマを構成しているそれぞれのPHPファイルのことをWordPressではテンプレートと言います。

テンプレートは階層構造をなしており、Webページにアクセスされた時に使用されるテンプレートファイルには自動的に優先度が設定されています。

このテンプレート階層の仕組みを理解することは、WordPressのテーマ開発では非常に重要なことです。

WordPressのテンプレートの優先順位

ベースとなるindex.phpとstyle.css

WordPressのテーマを構成しているファイルは、テーマによって異なりますが、すべてのテーマに共通している点は、「index.php」「style.css」が必ず含まれていることです。

言い換えるとテーマフォルダの中に「index.php」と「style.css」の2つさえあれば、とりあえずWordPressのシステムはそのテーマフォルダを1つのテーマと認識してくれるのです。

この2つのファイルだけからなるテーマでは、トップページも投稿ページも固定ページもカテゴリーアーカイブページなどもすべて「index.php」のテンプレートを使って表示されます。なぜなら「index.php」以外のテンプレートファイルが存在していないからです。

固定ページに使うpage.php

ここで、このテーマファイルの中に「page.php」というテンプレートファイルを追加したとします。

この状況である固定ページにブラウザでアクセスした時、今度は「index.php」ではなく「page.php」のテンプレートファイルが使われて固定ページが表示されるようになります。

つまり、「index.php」と「page.php」の両方が含まれたテーマが有効化されている時、固定ページの表示では「page.php」のテンプレートが優先されるということです。

この優先順位のことを、WordPressでは「テンプレート階層」といいます。

WordPressのテンプレート階層一覧

WordPressでは多種多様のWebページを作成できますが、Webページの種類を整理すると次のようになります。

Webページの種類
  • ホームページ(トップページ)
  • 投稿ページ
  • 固定ページ
  • カテゴリーページ
  • タグページ
  • 日付ページ
  • 作成者ページ
  • 検索結果ページ
  • カスタム分類ページ
  • カスタム投稿ページ
  • 404ページ

ざっと挙げるとこのようになります。WordPressでは訪問者がアクセスしたWebページのURLに応じて、適切なテンプレートファイルを選択してそれにふさわしいWebページを動的に構築して表示させます

以下、それぞれの種類におけるテンプレート階層と表示の優先順位を記載します。

ホームページ(トップページ)

  1. home.php
  2. index.php

投稿ページ

  1. single-{post_type}.php
  2. single.php
  3. singular.php
  4. index.php

※{post_type}の部分にはカスタム投稿タイプ名が入る

固定ページ

  1. カスタムテンプレートファイル
  2. page-{slug}.php
  3. page-{id}.php
  4. page.php
  5. singular.php
  6. index.php

※{slug}には固定ページのスラッグが入り、{id}には固定ページのidが入る

カテゴリーページ

  1. category-{slug}.php
  2. category-{id}.php
  3. category.php
  4. archive.php
  5. index.php

※{slug}にはカテゴリーページのスラッグが入り、{id}にはカテゴリーページのidが入る

タグページ

  1. tag-{slug}.php
  2. tag-{id}.php
  3. tag.php
  4. archive.php
  5. index.php

※{slug}にはタグページのスラッグが入り、{id}にはタグページのidが入る

日付ページ

  1. date.php
  2. archive.php
  3. index.php

作成者ページ

  1. author-{nicename}.php
  2. author-{id}.php
  3. author.php
  4. archive.php
  5. index.php

※{nicename}には作成者のnicenameが入り、{id}には作成者のidが入る

検索結果ページ

  1. search.php
  2. index.php

カスタム分類ページ

  1. taxonomy-{taxonomy}-{term}.php
  2. taxonomy-{taxonomy}.php
  3. taxonomy.php
  4. archive.php
  5. index.php

※{taxonomy}に分類名が入り、{term}にはその分類の項目が入る

カスタム投稿ページ

  1. archive-{post_type}.php
  2. archive.php
  3. index.php

※{post_type}にはカスタム投稿タイプ名が入る

404ページ

  1. 404.php
  2. index.php

WordPressのテーマ開発はテンプレートの役割の整理から始めよう

テンプレートの役割を整理することで、効率的にテーマの開発ができるようになります。

たとえば、投稿ページと固定ページで全く同じテンプレートを使いたい場合、それぞれのテンプレート階層の上位にある「single.php」や「page.php」などのファイルを無くして、「singular.php」だけ含めるようにすれば、投稿ページと固定ページの双方で「singular.php」という1つのテンプレートでWebページが表示されます。

つまりこのケースでは、全く同じ内容の「single.php」や「page.php」を作る必要はありません。

同様に、カテゴリーアーカイブと月別アーカイブで同じデザインにしたい場合は、上位にある「category.php」や「date.php」を含めないで、「archive.php」だけ存在していれば良いということになります。

また、テーマ開発の現場では、上位階層のテンプレートファイルが存在しているのに、下位階層のテンプレートファイルばかり編集していて、Webページのデザインが変わらなくておかしい、といったこともよくあります。
開発中のテーマに存在しているテーマファイルの把握も非常に大切です。

テンプレートの役割を整理すれば、無駄なテンプレートファイルを作成することなく効率的にテーマ開発が進みます。オリジナルテーマを開発する時は、常にテンプレート階層を意識するようにしましょう。