WordPressのテンプレート階層とは?ページ種類別の優先順位

最終更新日:

WordPressがページを生成する際、どのテンプレートファイルを呼び出すかはテンプレート階層に基づいて決まります。テンプレート階層とは何かを例を挙げて説明し、ページの種類ごとにテンプレート階層をご紹介します。

テンプレート階層とは?

テンプレート階層とは、WordPressがページを生成する際、使用するテンプレートファイルを決めるための仕組み(ルール)です。

ページの種類ごとにどのテンプレートファイルを呼び出すか優先順位が決まっています。

テーマのディレクトリ内から該当のテンプレートファイルがあるかファイル名で探します。

テンプレート階層の仕組み

呼び出されるテンプレートファイルは次のような流れで決まります。

  1. リクエストされたURLからページの種類を判別する
  2. ページの種類ごとにテンプレート階層上位のテンプレートファイルから探す
  3. 最初に一致するテンプレートファイルを使用する
  4. 一致しなければ階層内の次のファイルを探す
  5. どれにも一致しなければindex.phpを使用する

テンプレート階層の例

実際にカテゴリーページが表示される際、どのようにテンプレートファイルが選ばれるのか流れをみてみましょう。

  1. カテゴリーページがリクエストされる
  2. カテゴリのスラッグがtestの場合、category-test.phpというテンプレートファイルがあれば使用する
  3. カテゴリのIDが7の場合、category-7.phpというテンプレートファイルがあれば使用する
  4. category.phpというテンプレートファイルがあれば使用する
  5. archive.phpというテンプレートファイルがあれば使用する
  6. index.phpを使用する

テンプレート階層が必要な理由

WordPressのテンプレート階層があればURLごとにページを用意する必要はありません。

同じページ構成であれば同じテンプレートファイルを呼び出すようにすれば開発期間を短縮することができます。

テーマを作成する際、テンプレート階層を理解することで適切なテンプレートを編集することができます。

ページの種類ごとのテンプレート階層

表示するページの種類ごとにテンプレートファイルの優先順位は次の通りです。優先順位の高いものから並んでいます。

ホームページ

WordPressのデフォルトでは、ホームページに最新のブログ投稿を表示するように設定されています。このページをブログ投稿インデックスとも呼びます。

「ホームページの表示」で最新の投稿が選択されている場合、以下の優先順位になります。

  1. front-page.php
  2. home.php
  3. index.php
最新の投稿

フロントページ

「ホームページの表示」で固定ページが選択されている場合、ホームページに固定ページを指定しているかで優先順位が異なります。

ホームページ

ホームページが選択されている場合、以下の優先順位になります。

  1. front-page.php
  2. カスタムテンプレートファイル
  3. page.php
  4. singular.php
  5. index.php
固定ページ

指定した固定ページのテンプレートで「デフォルトテンプレート」以外を選択すると、選択したカスタムテンプレートファイルが優先されます。

テンプレート

投稿ページのみ

ホームページが選択されておらず投稿ページのみが選択されている場合、以下の優先順位になります。

  1. front-page.php
  2. home.php
  3. singular.php
  4. index.php
投稿ページ

プライバシーページ

「プライバシー設定」でプライバシーポリシーページとして「Privacy Policy」を選択しているかどうかで優先順位が異なります。

プライバシーポリシーページ

Privacy Policy

「Privacy Policy」が選択されている場合、以下の優先順位になります。

{slug}にはページのスラッグ、{id}にはページのIDが入ります。

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

privacy-policy.phpが存在しない場合、指定した固定ページのテンプレートで「デフォルトテンプレート」以外を選択すると、選択したカスタムテンプレートファイルが優先されます。

テンプレート

Privacy Policy以外

「Privacy Policy」以外が選択されている場合、以下の優先順位になります。

{slug}にはページのスラッグ、{id}にはページのIDが入ります。

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

投稿ページ

ブログの個別投稿ページは以下の優先順位になります。

{post-type}には投稿タイプ、{slug}には投稿ページのスラッグが入ります。

  1. single-{post-type}-{slug}.php
  2. single-{post-type}.php
  3. single.php
  4. singular.php
  5. index.php

固定ページ

固定ページは以下の優先順位になります。

{slug}にはページのスラッグ、{id}にはページのIDが入ります。

  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

作成者ページ

作成者ページは以下の優先順位になります。

{name}には作成者のユーザー名、{id}には作成者のIDが入ります。

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

日付ページ

日付ページは以下の優先順位になります。

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

検索結果ページ

検索結果ページは以下の優先順位になります。

  1. search.php
  2. index.php

404 (Not Found)ページ

404(Not Found)ページは以下の優先順位になります。

  1. 404.php
  2. index.php

添付ファイルページ

添付ファイルページは以下の優先順位になります。

{MIME-type}には、image/video/pdfなどが入ります。{slug}には添付ファイルのスラッグが入ります。

  1. {MIME-type}.php
  2. attachment.php
  3. single-attachment-{slug}.php
  4. single-attachment.php
  5. single.php
  6. singular.php
  7. index.php

{MIME-type}にtext-plainを指定する場合の優先順位です。

  1. text-plain.php
  2. plain.php
  3. text.php

Embedページ

Embedページは以下の優先順位になります。

{post-type}には投稿タイプ、{post-format}には投稿フォーマットが入ります。

  1. embed-{post-type}-{post-format}.php
  2. embed-{post-type}.php 
  3. embed.php
  4. wp-includes/theme-compat/embed.php

カスタム投稿タイプページ

カスタム投稿タイプページは以下の優先順位になります。

{post-type}には投稿タイプが入ります。

  1. archive-{post-type}.php
  2. archive.php
  3. index.php

カスタムタクソノミーページ

カスタムタクソノミーページは以下の優先順位になります。

{taxonomy}にはタクソノミー、{term}にはタームが入ります。

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