会員ログイン
テーマ開発

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

WordPressテンプレート階層はスラッグ別ファイルの優先順位が重要のアイキャッチ画像
はじめに
概要

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

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

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

疑問を持つ読者のイラスト読者

WordPressテンプレート階層はスラッグ別ファイルの優先順位が重要は、最初にどこを理解するとよいですか?

著者・木村のプロフィール写真木村

WordPress標準機能、プラグインの機能、テーマ側の処理を分けて考えると、どこを変更すべきか判断しやすくなります。

話を聞く読者のイラスト読者

実際に試すときは、手順だけでなく確認方法も知っておいた方がよいでしょうか?

著者・木村のプロフィール写真木村

はい。この記事では、作業の目的から実装後の確認までを順番に整理します。自分の環境と照らし合わせながら読み進めてください。

※本記事の情報は執筆時点のものです。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のテンプレート構造も理解しやすくなります。

page-contact.phpで固定ページを専用化するで押さえたいポイント

page-contact.phpで固定ページを専用化するは、コードや設定だけを切り離して覚えるより、何を変えるための処理なのかを確認してから試すと理解しやすくなります。変更前の状態を控え、作業を一つずつ反映すると、問題が起きた場所も特定しやすくなります。

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

Template Nameを使うと管理画面から選べるでは、WordPressテンプレート階層はスラッグ別ファイルの優先順位が重要を理解・実装するために必要な考え方と、作業時に確認したい点を整理します。最初に役割を把握してから、記事内の手順へ進みましょう。

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

固定ページでは、スラッグに合わせた 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 のように、役割ごとにファイルを分けると管理しやすい

MEMBER COMMENTS

コメント(2件)

  1. なお

    固定ページのスラッグ別テンプレートが先に選ばれる順番を理解できました。親子ページの場合は、子ページのスラッグだけを使ったファイル名でも判定されますか?

    1. Souichi_Kimura

      はい、親子関係がある固定ページでもpage-{子ページのスラッグ}.phpは判定対象になります。ファイル名に親ページのスラッグを含める必要はありません。ただし同じスラッグの扱いや運用を明確にしたい場合は、固定ページテンプレートを割り当てる方法も選択肢です。

会員ログイン後にコメントできます

記事への質問や感想をコメントで共有できます。無料会員登録後もこの記事へ戻れます。