WordPressでテーマを開発したり、既存テーマをカスタマイズしたりする上で、避けては通れない非常に重要な概念が「テンプレート階層」です。WordPressは、表示しようとしているページの種類(ホームページ、個別投稿、固定ページ、カテゴリーアーカイブなど)に応じて、テーマフォルダ内からどのテンプレートファイルを使用するかを、この階層構造に基づいて決定します。
このテンプレート階層を理解することで、特定のページのデザインやレイアウトをピンポイントで変更したり、独自のテンプレートファイルを作成してより柔軟なサイト構築を行ったりすることが可能になります。この記事では、主要なビュータイプごとのテンプレートファイルの優先順位をチートシートとしてまとめました。
テンプレート階層の基本
WordPressがテンプレートファイルを探す際の基本的な原則は、「より具体的であればあるほど優先される」というものです。例えば、特定のカテゴリースラッグに合致するテンプレートファイルがあればそれが使われ、なければ一般的なカテゴリーアーカイブ用テンプレート、それもなければ汎用アーカイブ用テンプレート、最終的にはindex.php
が使われる、といった流れになります。
index.php
は、どの条件にも合致するテンプレートファイルが見つからなかった場合の最終的な受け皿となるため、テーマには必須のファイルです。
テンプレート階層を把握することは、意図した通りにWordPressサイトの見た目を制御するための第一歩です。
主要なビュータイプ別テンプレート階層一覧
WordPressが表示するページの種類に応じて使用するテンプレートファイルを決定する際の優先順位を機能別に分類しました。各階層の理解・活用の重要度を星の5段階評価で示しています。星の数の目安は以下の通りです。
★★★★★:ほぼ全ての開発で頻繁に利用され、基本かつ非常に重要なパラメータ
★★★★☆:高頻度で利用され、多くの一般的なカスタマイズで役立つ重要なパラメータ
★★★☆☆:中程度の頻度で利用され、特定の機能を実現する際に便利なパラメータ
★★☆☆☆:利用頻度はやや低めですが、特定の要件や細かな制御を行いたい場合に役立つパラメータ
★☆☆☆☆:利用頻度は低く、非常に限定的な状況や高度なカスタマイズでのみ使用されるパラメータ
表示ページの種類 | テンプレートファイルの優先順位 (右に行くほど優先度が低い) | 解説・補足 (重要度) |
---|---|---|
ホームページ (サイトのフロントページ) |
front-page.php → (「表示設定」による分岐) → home.php または page.php (特定の固定ページ) → index.php |
★★★★★ サイトの顔となるページです。「表示設定」で「最新の投稿」か「固定ページ」のどちらを選択しているかで、 front-page.php の次に読み込まれるファイルが変わります。 |
ブログ投稿インデックスページ (「表示設定」でホームページに「最新の投稿」を指定した場合、または「投稿ページ」として指定した固定ページ) |
home.php → index.php |
★★★★☆ ブログ記事の一覧を表示する専用のページです。多くのテーマでカスタマイズされます。 |
個別投稿ページ (通常の投稿) | single-{post_type}-{slug}.php (例: single-post-hello-world.php ) → single-{post_type}.php (例: single-post.php ) → single.php → singular.php → index.php |
★★★★★ 個々のブログ記事の詳細ページです。 single.php が基本ですが、特定の投稿タイプやスラッグに応じた詳細なカスタマイズが可能です。 |
固定ページ | カスタムページテンプレート (ファイルヘッダーで指定) → page-{slug}.php (例: page-about-us.php ) → page-{id}.php (例: page-7.php ) → page.php → singular.php → index.php |
★★★★★ 会社概要やお問い合わせなどの静的なページです。特定のページ専用のテンプレートを作成することがよくあります。 |
カスタム投稿タイプ 個別ページ | single-{post_type}-{slug}.php (例: single-product-awesome-widget.php ) → single-{post_type}.php (例: single-product.php ) → single.php → singular.php → index.php |
★★★★★ カスタム投稿タイプを使用している場合、その個別記事の表示に使われます。 single-{post_type}.php の作成はほぼ必須です。 |
カスタム投稿タイプ アーカイブページ | archive-{post_type}.php (例: archive-product.php ) → archive.php → index.php |
★★★★☆ カスタム投稿タイプの一覧ページです。その投稿タイプに特化したデザインや情報表示が可能です。 |
カテゴリーアーカイブページ | category-{slug}.php (例: category-news.php ) → category-{id}.php (例: category-5.php ) → category.php → archive.php → index.php |
★★★★☆ 特定のカテゴリーに属する投稿の一覧ページです。カテゴリーごとにデザインを変えたい場合に利用します。 |
タグアーカイブページ | tag-{slug}.php (例: tag-wordpress.php ) → tag-{id}.php (例: tag-12.php ) → tag.php → archive.php → index.php |
★★★★☆ 特定のタグが付与された投稿の一覧ページです。 |
カスタムタクソノミー アーカイブページ | taxonomy-{taxonomy}-{term}.php (例: taxonomy-genre-action.php ) → taxonomy-{taxonomy}.php (例: taxonomy-genre.php ) → taxonomy.php → archive.php → index.php |
★★★★☆ カスタムタクソノミーのタームごとの一覧ページです。カスタム投稿タイプと併用されることが多いです。 |
日付アーカイブページ | date.php → archive.php → index.php |
★★★☆☆ 年別、月別、日別の投稿一覧ページです。特定のデザインを適用したい場合に作成します。 |
著者アーカイブページ | author-{user_nicename}.php (例: author-john.php ) → author-{id}.php (例: author-3.php ) → author.php → archive.php → index.php |
★★★☆☆ 特定の著者が書いた投稿の一覧ページです。著者紹介などを盛り込むこともできます。 |
検索結果ページ | search.php → index.php |
★★★☆☆ サイト内検索の結果を表示するページです。専用のレイアウトを用意することが推奨されます。 |
404 Not Found ページ | 404.php → index.php |
★★★★☆ 存在しないページにアクセスした際に表示されるエラーページです。ユーザーを適切に案内するために重要です。 |
添付ファイルページ | MIME_type.php (例: image.php , video.php ) → attachment.php → single-attachment.php (WP 4.7以降は single-attachment-{mime_type_subtype}.php も) → single.php → singular.php → index.php |
★★☆☆☆ 画像や動画などの添付ファイル単独のページです。通常、SEOの観点から無効化したり、リダイレクトさせたりすることが多いですが、専用の表示が必要な場合に作成します。 |
埋め込みテンプレート | embed-{post-type}-{post_format}.php → embed-{post-type}.php → embed.php |
★☆☆☆☆ oEmbed機能で他のサイトにWordPressの投稿を埋め込む際の表示テンプレートです。カスタマイズすることは稀です。 |
テンプレート階層を視覚的に理解するヒント
- ブラウザの開発者ツールを活用する: 多くのテーマでは、現在表示されているページの種類に応じたCSSクラスが
タグに付与されています(例:
home
,single-post
,page-id-7
,category-news
など)。これらを確認することで、どの階層に該当するページなのかを推測できます。 - デバッグ用プラグインを利用する: 「Query Monitor」のような開発者向けプラグインを導入すると、現在どのテンプレートファイルが実際に読み込まれて表示に使われているかを簡単に確認できます。
テンプレート階層のカスタマイズ(簡単な紹介)
テンプレート階層は非常に強力ですが、さらに柔軟な制御が必要な場合もあります。
get_template_part( $slug, $name )
の活用:テーマ内で繰り返し使われる部分(例: 投稿ループ内の1記事分の表示など)を別のファイルに分割し、
get_template_part()
で呼び出すことで、コードの再利用性が高まり、管理しやすくなります。この関数も内部的にテンプレート階層に似た仕組みでファイルを探します(例:content-{$slug}-{$name}.php
→content-{$slug}.php
→content.php
)。12345<?php// 例: ループ内で記事の表示部分を呼び出すget_template_part( 'template-parts/content', get_post_format() );// 投稿フォーマットに応じたファイル (例: content-aside.php) があればそれを、なければ content.php を探す?>template_include
フックの利用 (上級者向け):このフィルターフックを使うと、WordPressが最終的に読み込むテンプレートファイルを動的に変更できます。非常に強力ですが、テーマの構造を複雑にする可能性もあるため、慎重な利用が必要です。
123456789101112<?phpadd_filter( 'template_include', 'my_custom_template_selector' );function my_custom_template_selector( $template ) {if ( is_category('special-cat') ) {$new_template = locate_template( array( 'custom-templates/special-category-template.php' ) );if ( '' != $new_template ) {return $new_template;}}return $template; // 元のテンプレートファイルを返す}?>
よくある質問 (FAQ)
- Q1:
front-page.php
とhome.php
の具体的な違いは何ですか? - A1:
front-page.php
は、WordPressの「表示設定」で「ホームページの表示」が「最新の投稿」または「固定ページ」のどちらに設定されていても、サイトのトップページ(ドメインルート)で最も優先して使用されるテンプレートです。一方、home.php
は、「表示設定」で「ホームページの表示」が「最新の投稿」に設定されている場合にトップページとして、または「投稿ページ」として特定の固定ページが指定されている場合にその固定ページの表示に使われます。front-page.php
が存在すれば、home.php
やpage.php
より優先されます。 - Q2:
singular.php
はどのような時に使われますか? - A2:
singular.php
は、個別表示系のテンプレート(single.php
,page.php
,attachment.php
,single-{post_type}.php
など)が存在しない場合に、それらの代わりに使われる汎用的な個別表示用テンプレートです。これらより具体的なテンプレートがあれば、そちらが優先されます。 - Q3: 子テーマでテンプレート階層はどのように機能しますか?
- A3: 子テーマを作成した場合、WordPressはまず子テーマのディレクトリ内に該当するテンプレートファイルがあるかを探します。もし見つかればそれを使用し、見つからなければ親テーマのディレクトリ内を探します。この仕組みにより、親テーマのファイルを直接編集することなく、必要なテンプレートファイルだけを子テーマにコピーしてカスタマイズすることができます。
まとめ
WordPressのテンプレート階層は、一見複雑に見えるかもしれませんが、そのルールを理解することでテーマ開発やカスタマイズの自由度が格段に向上します。どのページがどのファイルによって表示されているのかを正確に把握し、適切なファイルを編集・作成することで、より洗練された、そしてユーザーにとって使いやすいサイトを構築できるようになるでしょう。
私たちは、歴史と新しい文化が交差する街、埼玉県川越市で活動しており、WordPressサイトのカスタマイズや運用サポート、技術的な問題解決に情熱を注いでいます。川越市内外のお客様からのご相談を心よりお待ちしております。
もっとWordPressの技術を磨きたい、あるいはプロジェクトの相談相手が欲しいとお考えでしたら、WordPress顧問エンジニアサービスをご検討くださいね。