WordPressのテンプレート階層とは?ページ種類別の優先順位
最終更新日:
WordPressがページを生成する際、どのテンプレートファイルを呼び出すかはテンプレート階層に基づいて決まります。テンプレート階層とは何かを例を挙げて説明し、ページの種類ごとにテンプレート階層をご紹介します。
テンプレート階層とは?
テンプレート階層とは、WordPressがページを生成する際、使用するテンプレートファイルを決めるための仕組み(ルール)です。
ページの種類ごとにどのテンプレートファイルを呼び出すか優先順位が決まっています。
テーマのディレクトリ内から該当のテンプレートファイルがあるかファイル名で探します。
テンプレート階層の仕組み
呼び出されるテンプレートファイルは次のような流れで決まります。
- リクエストされたURLからページの種類を判別する
- ページの種類ごとにテンプレート階層上位のテンプレートファイルから探す
- 最初に一致するテンプレートファイルを使用する
- 一致しなければ階層内の次のファイルを探す
- どれにも一致しなければindex.phpを使用する
テンプレート階層の例
実際にカテゴリーページが表示される際、どのようにテンプレートファイルが選ばれるのか流れをみてみましょう。
- カテゴリーページがリクエストされる
- カテゴリのスラッグがtestの場合、category-test.phpというテンプレートファイルがあれば使用する
- カテゴリのIDが7の場合、category-7.phpというテンプレートファイルがあれば使用する
- category.phpというテンプレートファイルがあれば使用する
- archive.phpというテンプレートファイルがあれば使用する
- index.phpを使用する
テンプレート階層が必要な理由
WordPressのテンプレート階層があればURLごとにページを用意する必要はありません。
同じページ構成であれば同じテンプレートファイルを呼び出すようにすれば開発期間を短縮することができます。
テーマを作成する際、テンプレート階層を理解することで適切なテンプレートを編集することができます。
ページの種類ごとのテンプレート階層
表示するページの種類ごとにテンプレートファイルの優先順位は次の通りです。優先順位の高いものから並んでいます。
ホームページ
WordPressのデフォルトでは、ホームページに最新のブログ投稿を表示するように設定されています。このページをブログ投稿インデックスとも呼びます。
「ホームページの表示」で最新の投稿が選択されている場合、以下の優先順位になります。
- front-page.php
- home.php
- index.php
フロントページ
「ホームページの表示」で固定ページが選択されている場合、ホームページに固定ページを指定しているかで優先順位が異なります。
ホームページ
ホームページが選択されている場合、以下の優先順位になります。
- front-page.php
- カスタムテンプレートファイル
- page.php
- singular.php
- index.php
指定した固定ページのテンプレートで「デフォルトテンプレート」以外を選択すると、選択したカスタムテンプレートファイルが優先されます。
投稿ページのみ
ホームページが選択されておらず投稿ページのみが選択されている場合、以下の優先順位になります。
- front-page.php
- home.php
- singular.php
- index.php
プライバシーページ
「プライバシー設定」でプライバシーポリシーページとして「Privacy Policy」を選択しているかどうかで優先順位が異なります。
Privacy Policy
「Privacy Policy」が選択されている場合、以下の優先順位になります。
{slug}にはページのスラッグ、{id}にはページのIDが入ります。
- privacy-policy.php
- カスタムテンプレートファイル
- page-{slug}.php
- page-{id}.php
- page.php
- singular.php
- index.php
privacy-policy.phpが存在しない場合、指定した固定ページのテンプレートで「デフォルトテンプレート」以外を選択すると、選択したカスタムテンプレートファイルが優先されます。
Privacy Policy以外
「Privacy Policy」以外が選択されている場合、以下の優先順位になります。
{slug}にはページのスラッグ、{id}にはページのIDが入ります。
- カスタムテンプレートファイル
- page-{slug}.php
- page-{id}.php
- page.php
- singular.php
- index.php
投稿ページ
ブログの個別投稿ページは以下の優先順位になります。
{post-type}には投稿タイプ、{slug}には投稿ページのスラッグが入ります。
- single-{post-type}-{slug}.php
- single-{post-type}.php
- single.php
- singular.php
- index.php
固定ページ
固定ページは以下の優先順位になります。
{slug}にはページのスラッグ、{id}にはページのIDが入ります。
- カスタムテンプレートファイル
- page-{slug}.php
- page-{id}.php
- page.php
- singular.php
- index.php
カテゴリーページ
カテゴリページは以下の優先順位になります。
{slug}にはカテゴリーのスラッグ、{id}にはカテゴリーのIDが入ります。
- category-{slug}.php
- category-{id}.php
- category.php
- archive.php
- index.php
タグページ
タグページは以下の優先順位になります。
{slug}にはタグのスラッグ、{id}にはタグのIDが入ります。
- tag-{slug}.php
- tag-{id}.php
- tag.php
- archive.php
- index.php
作成者ページ
作成者ページは以下の優先順位になります。
{name}には作成者のユーザー名、{id}には作成者のIDが入ります。
- author-{name}.php
- author-{id}.php
- author.php
- archive.php
- index.php
日付ページ
日付ページは以下の優先順位になります。
- date.php
- archive.php
- index.php
検索結果ページ
検索結果ページは以下の優先順位になります。
- search.php
- index.php
404 (Not Found)ページ
404(Not Found)ページは以下の優先順位になります。
- 404.php
- index.php
添付ファイルページ
添付ファイルページは以下の優先順位になります。
{MIME-type}には、image/video/pdfなどが入ります。{slug}には添付ファイルのスラッグが入ります。
- {MIME-type}.php
- attachment.php
- single-attachment-{slug}.php
- single-attachment.php
- single.php
- singular.php
- index.php
{MIME-type}にtext-plainを指定する場合の優先順位です。
- text-plain.php
- plain.php
- text.php
Embedページ
Embedページは以下の優先順位になります。
{post-type}には投稿タイプ、{post-format}には投稿フォーマットが入ります。
- embed-{post-type}-{post-format}.php
- embed-{post-type}.php
- embed.php
- wp-includes/theme-compat/embed.php
カスタム投稿タイプページ
カスタム投稿タイプページは以下の優先順位になります。
{post-type}には投稿タイプが入ります。
- archive-{post-type}.php
- archive.php
- index.php
カスタムタクソノミーページ
カスタムタクソノミーページは以下の優先順位になります。
{taxonomy}にはタクソノミー、{term}にはタームが入ります。
- taxonomy-{taxonomy}-{term}.php
- taxonomy-{taxonomy}.php
- taxonomy.php
- archive.php
- index.php