WordPressテンプレート階層はスラッグ別ファイルの優先順位が重要

2026.05.10
はじめに
概要

前回は、WordPressのオリジナルテーマで使う基本のテンプレートファイルとして、front-page.phppage.phparchive.phpsingle.phpなどを確認しました。今回はその続きとして、ファイル名によって、より具体的なテンプレートが優先して読み込まれる仕組みを解説します。

たとえば固定ページのスラッグがcontactの場合、テーマ内にpage-contact.phpを作ると、通常のpage.phpよりも先にそのファイルが読み込まれます。これは、HTMLでabout.htmlcontact.htmlを分けて管理する感覚に近く、ページごとの役割を把握しやすくなります。

また固定ページでは、ファイルの先頭にTemplate Nameを書くことで、管理画面から選択できるテンプレートとして扱うこともできます。この記事では、ループの詳しい書き方ではなく、どのファイル名にすると、どのページで優先されるのかという考え方に絞って説明します。

※本記事の情報は執筆時点のものです。WordPressのバージョンやテーマ構成によって、管理画面の表示やテンプレートの扱いが異なる場合があります。

テンプレート階層は具体的なファイルを優先する

WordPressには、表示するページに応じてテンプレートファイルを探す順番があります。この順番のことをテンプレート階層といいます。

大切なのは、より具体的な条件に合うファイルがあれば、汎用的なファイルよりも先に読み込まれるという点です。

固定ページの優先順位

固定ページでは、スラッグやIDに対応したファイルがあるかを先に確認します。スラッグとは、URLの一部になる英数字の名前です。たとえば/contact/contactがスラッグです。

page-{slug}.php
↓
page-{id}.php
↓
page.php
↓
singular.php
↓
index.php

上の順番を見ると、page.phpよりもpage-{slug}.phpが先にあることがわかります。つまり、固定ページのスラッグがcontactなら、page-contact.phpが優先されます。

この仕組みを使うと、すべての固定ページをpage.phpにまとめず、特定のページだけ専用ファイルに分けることができます。

page-contact.phpで固定ページを専用化する

page-contact.phpは、固定ページのスラッグがcontactのときに優先して読み込まれるテンプレートファイルです。お問い合わせページのように、通常の固定ページとは構造が違うページで使いやすい考え方です。

お問い合わせページを専用ファイルにする

次のコードは、page-contact.phpというファイルを作り、お問い合わせページ専用のHTML構造を管理する例です。フォーム部分はショートコードを使う想定にしています。

<?php
// page-contact.php
// 固定ページのスラッグが contact のときに優先して読み込まれる
get_header();
?>

<main class="contact-page">
  <section class="contact-hero">
    <h1>お問い合わせ</h1>
    <p>制作のご相談やご質問はこちらからお問い合わせください。</p>
  </section>

  <section class="contact-form">
    <?php echo do_shortcode('[contact-form-7 id="123" title="お問い合わせフォーム"]'); ?>
  </section>
</main>

<?php get_footer(); ?>

重要なのは、ファイル名がpage-contact.phpになっている点です。固定ページのスラッグがcontactであれば、WordPressはこのファイルを優先して読み込みます。

HTMLでcontact.htmlを作るような感覚で、WordPressでもお問い合わせページ専用のPHPファイルとして管理できます。

page-contact.phpではなくcontact.phpにすることで、
通常のHTMLファイルを作成する感覚に近い形で構築でき、
WordPressのテンプレート構造も理解しやすくなります。

Template Nameを使うと管理画面から選べる

固定ページでは、スラッグに合わせたpage-contact.phpだけでなく、ファイルの先頭にコメントを書いてテンプレートとして登録する方法もあります。

この方法を使うと、ファイル名をcontact.phptemplate-contact.phpのように自由にできます。管理画面の「テンプレート」から選択して使うイメージです。

Template Nameを書く例

次のコードは、固定ページテンプレートとして管理画面から選べるようにする例です。ファイル名はcontact.phpでも問題ありません。

<?php
/*
Template Name: お問い合わせページ
*/
get_header();
?>

<main class="contact-page">
  <h1>お問い合わせ</h1>
  <?php echo do_shortcode('[contact-form-7 id="123" title="お問い合わせフォーム"]'); ?>
</main>

<?php get_footer(); ?>

一番上のコメントにあるTemplate Name: お問い合わせページが重要です。これを書くことで、WordPressの固定ページ編集画面からこのテンプレートを選べるようになります。

page-contact.phpとの違い

page-contact.phpは、スラッグがcontactの固定ページに自動で反応します。一方、Template Nameは、管理画面でそのテンプレートを選択して使います。

page-contact.php
スラッグ contact の固定ページに自動で反応する

contact.php + Template Name
管理画面でテンプレートを選択して使う

URLやページ名とファイルを強く結びつけたい場合はpage-{slug}.php、管理画面から選んで使いたい場合はTemplate Nameと覚えるとわかりやすいです。

アーカイブとシングルもファイル名で分けられる

ファイル名で優先順位を変える考え方は、固定ページだけではありません。カスタム投稿タイプを使っている場合、一覧ページや詳細ページもファイル名で分けられます。

投稿タイプごとのテンプレート

たとえばカスタム投稿タイプのスラッグがnewsの場合、一覧ページはarchive-news.php、詳細ページはsingle-news.phpのように分けられます。

news の一覧ページ
archive-news.php
↓
archive.php
↓
index.php

news の詳細ページ
single-news.php
↓
single.php
↓
index.php

ここでも考え方は同じです。archive.phpsingle.phpよりも、投稿タイプ名が入った具体的なファイルが優先されます。

ループの書き方や記事の出力方法は別の記事で詳しく扱うとして、まずはarchive-{post_type}.phpsingle-{post_type}.phpというファイル名の意味を押さえておきましょう。

ファイル名で分けると管理しやすい

テンプレートファイルを分ける目的は、単にページごとの見た目を変えることだけではありません。どのページをどのファイルが担当しているのかを明確にできることが大きなメリットです。

HTMLファイルのように役割で分ける

静的なHTMLサイトでは、会社概要ならabout.html、お問い合わせならcontact.htmlのようにファイルを分けます。WordPressでも、テンプレート階層を理解するとそれに近い感覚で管理できます。

about ページを専用化したい
page-about.php

contact ページを専用化したい
page-contact.php

管理画面から選べるテンプレートにしたい
Template Name を書いた contact.php

news の一覧を専用化したい
archive-news.php

news の詳細を専用化したい
single-news.php

すべてをpage.phpsingle.phpに詰め込むと、後から条件分岐が増えて管理しづらくなります。最初から役割ごとにテンプレートを分けると、修正するファイルを見つけやすくなります。

今回の記事で一番伝えたいのは、WordPressはファイル名のルールに従って、より具体的なテンプレートを優先して読み込むという点です。この考え方がわかると、オリジナルテーマの構成がかなり整理しやすくなります。

まとめ

  • WordPressは、汎用的なテンプレートよりも具体的なテンプレートを優先して読み込む
  • page-contact.phpのように書くと、スラッグがcontactの固定ページで優先される
  • Template Nameを書くと、固定ページ編集画面からテンプレートを選択できる
  • archive-news.phpsingle-news.phpのように、投稿タイプごとにも分けられる
  • HTMLのabout.htmlcontact.htmlのように、役割ごとにファイルを分けると管理しやすい

関連記事