WordPress でサイトのデザインを自由に変えるには、テーマ内のテンプレートファイルを編集します。ところが、どのページでどのテンプレートが使われるかは固定ではなく、WordPress が条件に基づいて自動的に選択します。この仕組みを「テンプレート階層」と呼びます。階層を理解すれば、特定のページだけデザインを変えたり、将来の保守を楽にできます。ここでは WordPress 公式ドキュメントを参考に、テンプレート階層と主なテンプレートファイルを初心者向けに解説します。

テンプレート階層とは

Web ブラウザーが WordPress サイトのあるページをリクエストすると、WordPress はまず クエリ文字列を確認し、アクセスされたページの種類を判断します。例えば「検索ページ」「カテゴリーページ」「特定の記事ページ」などです。次に、テンプレート階層の順序に従ってテーマ内のファイルを探し、最初に一致したテンプレートファイルを適用します。特定のテンプレートが見つからない場合はより汎用的なテンプレートへ、最後には index.php へとフォールバックします。子テーマを使っている場合は子テーマのファイルが親テーマより優先されます。

ポイントは次の通りです。

  • WordPress は 最も特定的なファイルから順に探します。ファイル名にスラッグや ID を含むテンプレートがある場合、それが最優先されます。
  • 該当ファイルがなければ次の候補へ、最終的には index.php になります。
  • ブロックテーマの場合は拡張子が .html ですが、階層の考え方は同じです。

代表的なクエリタイプとテンプレートの優先順位

公式ドキュメントでは多くのケースが紹介されています。ここでは代表的なページタイプごとに、ファイルが使われる順序をまとめます。より具体的なファイルが存在すればそれが優先され、なければリスト下部の一般的なテンプレートが使われます。

テンプレート階層のツリー構造の図

ホームページとフロントページ

サイトのトップページ(ブログ投稿インデックスや固定ページ)には主に次のテンプレートが使われます。

  • front‑page.php – 「フロントページの表示」が「最新の投稿」「固定ページ」のどちらでも、存在すれば最優先。
  • home.phpfront‑page.php がない場合にブログ投稿インデックス用に使われます。ブログ投稿を別ページに設定している場合も同じです。
  • page.php – フロントページに固定ページを割り当てている場合、front‑page.phphome.php がなければ使われます。
  • index.php – 他のテンプレートがない場合の最終フォールバックです。

投稿(single)

個別投稿ページは次の順にファイルを読み込みます。

  1. single‑{post‑type}-{slug}.php – 4.4 以降は投稿タイプとスラッグを含むテンプレートが最優先。
  2. single‑{post‑type}.php – カスタム投稿タイプの個別投稿用。
  3. single.php – 一般的な投稿用。
  4. singular.php – 投稿とページ両方で使われる汎用テンプレート。
  5. index.php – 最終フォールバック。

固定ページ(page)

固定ページ(投稿タイプ page)のテンプレート優先順位は次の通りです。

  1. カスタムページテンプレート – 管理画面で割り当てたテンプレート。
  2. page‑{slug}.php – スラッグ名に対応するテンプレート。
  3. page‑{id}.php – 固定ページの ID に対応するテンプレート。
  4. page.phpsingular.phpindex.php – 汎用テンプレートへフォールバック。

アーカイブページ

カテゴリーやタグなどのアーカイブページは次の順番でテンプレートが読み込まれます。

カテゴリー

  • category-{slug}.phpcategory-{id}.phpcategory.phparchive.phpindex.php

タグ

  • tag-{slug}.phptag-{id}.phptag.phparchive.phpindex.php

カスタムタクソノミー

  • taxonomy-{taxonomy}-{term}.phptaxonomy-{taxonomy}.phptaxonomy.phparchive.phpindex.php

カスタム投稿タイプアーカイブ

  • archive-{post_type}.phparchive.phpindex.php

投稿者・日付アーカイブ

  • 投稿者: author-{nicename}.phpauthor-{id}.phpauthor.phparchive.phpindex.php
  • 日付: date.phparchive.phpindex.php

検索・404・添付ファイル・埋め込み

  • 検索結果: search.phpindex.php
  • 404ページ: 404.phpindex.php
  • 添付ファイル(attachment): MIMEタイプごとのテンプレート → attachment.phpsingle-attachment-{slug}.phpsingle-attachment.phpsingle.phpsingular.phpindex.php
  • 埋め込み(embed): embed-{post-type}-{post_format}.phpembed-{post-type}.phpembed.php → WordPress 内部テンプレート

非 ASCII 文字とフィルター

WordPress 4.7 以降では、テンプレート名に日本語など非 ASCII 文字が含まれる場合、エンコードされたファイル名とエンコードされていないファイル名の両方が使えるようになりました。また、テンプレート階層にはフィルターを通してカスタムテンプレートを追加することも可能です。例えば author_template フィルターで、投稿者の権限に応じた author-editor.php を優先するように変更できます。

よく使われるテンプレートファイル一覧

WordPress テーマには多数のテンプレートがありますが、実際によく使われる基本的なファイルは限られています。以下の表では、公式ドキュメントの「Common WordPress template files」に基づき、代表的なテンプレートファイルとその役割を簡潔にまとめています。

テンプレートファイル用途 (簡潔な説明)
index.phpもっとも汎用的なテンプレート。すべてのテンプレートの最終フォールバック。
style.cssテーマのスタイルシート兼テーマ情報。
front‑page.phpサイトのフロントページに常に使用される。
home.phpブログ投稿インデックス (最新の投稿一覧) を表示する。
singular.phpsingle.phppage.php が無い場合に投稿・ページ両方の表示に使う。
single.php個別投稿の表示。
single-{post_type}.phpカスタム投稿タイプの個別投稿を表示。
archive-{post_type}.phpカスタム投稿タイプのアーカイブ一覧を表示。
page.php固定ページの表示。
page-{slug}.php特定のスラッグを持つ固定ページの表示。
category.phpカテゴリーアーカイブの表示。
tag.phpタグアーカイブの表示。
taxonomy.phpカスタムタクソノミーの表示。
author.php投稿者アーカイブの表示。
date.php日付アーカイブの表示。
archive.php一般的なアーカイブページの表示。
search.php検索結果ページの表示。
attachment.php添付ファイルの単独表示。
image.php画像添付の単独表示。
404.php404 (Not Found) ページの表示。
comments.phpコメントテンプレート。

テンプレートパーツ

ページ全体ではなく一部分を管理するテンプレートパーツもあります。代表的なものに header.php (ヘッダー)、footer.php (フッター)、sidebar.php (サイドバー) があり、get_header()get_footer() などのテンプレートタグを使ってテンプレート内で呼び出します。WordPress 公式ドキュメントには get_header()get_template_part() など、具体的な関数の例が載っているので参考にすると良いでしょう。

テンプレート階層を意識したテーマカスタマイズのコツ

  1. 特定のページだけを変更したい場合は具体的なテンプレートを作成
    たとえば特定のカテゴリー用の category-news.php を作れば、そのカテゴリーの記事一覧だけを別デザインにできます。
  2. ページが見つからない場合は index.php が表示される
    カスタマイズし忘れてもサイトが白紙になることはありませんが、汎用テンプレートが使われるためデザインが統一されない場合があります。
  3. 子テーマを活用
    テーマを直接編集するとアップデートで上書きされる可能性があります。子テーマにテンプレートを追加すれば親テーマより優先的に使用されるため安全です。
  4. テンプレートパーツで共通部分を管理
    ヘッダーやフッターを別ファイルに切り出すことで、複数のテンプレートから呼び出せます。修正が必要になった場合、パーツを一度編集するだけで済みます。
  5. フィルターで階層を拡張
    特定の条件でテンプレートの優先順位を変更したい場合はフィルターを利用できます。例えば author_template フィルターで投稿者の権限ごとにテンプレートを切り替えることができます。

まとめ

テンプレート階層は「どのテンプレートファイルを使うか」を決める WordPress のルールです。クエリタイプに応じて最適なテンプレートを順番に探し、該当するファイルがなければ汎用的なテンプレートにフォールバックします。よく使われるテンプレートファイルやパーツの役割を理解し、階層の優先順位を意識してファイルを作成すれば、思い通りのデザインで安定したテーマを構築できます。

参照したドキュメント