
目次 & インサイト
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
WordPressでオリジナルテーマを制作していると、
「このページは single.php で表示されるの?」
「カスタム投稿タイプの詳細ページはどのファイルを使う?」
「カテゴリー一覧は archive.php なの?」
といった疑問が出てきます。
WordPressには、**テンプレート階層(Template Hierarchy)**という仕組みがあります。
これは、ユーザーがアクセスしたページの種類に応じて、WordPressが「どのテンプレートファイルを使ってページを表示するか」を決める仕組みです。
第3回ではWordPressテーマの基本構造、第4回では投稿・固定ページ・カスタム投稿タイプなどのコンテンツ設計について解説しました。
今回はそこから一歩進み、
「そのコンテンツが、実際にどのテンプレートで表示されるのか?」
を理解していきます。
1. WordPressはURLから「何のページなのか」を判断している
WordPressでページを表示するとき、単純にURLとPHPファイルが1対1で対応しているわけではありません。
例えば、
https://example.com/wordpress/
というURLにアクセスしたからといって、
wordpress.php
というファイルを直接呼び出しているわけではありません。
WordPressは、リクエストされたURLなどの情報から、
- トップページなのか
- 投稿ページなのか
- 固定ページなのか
- カテゴリー一覧なのか
- タグ一覧なのか
- カスタム投稿タイプなのか
- 検索結果なのか
- 404ページなのか
などを判断します。
そして、その条件に合ったテンプレートをテンプレート階層に従って探します。
WordPress公式ドキュメントでも、テンプレートローダーがリクエストされたページの情報をもとにテンプレート階層をたどり、最初に見つかった適切なテンプレートを使用すると説明されています。
2. テンプレート階層とは?
テンプレート階層を簡単に説明すると、
「より具体的なテンプレートから探し、なければより汎用的なテンプレートへフォールバックする仕組み」
です。
例えばカテゴリーの場合、
category-wordpress.php
↓ なければ
category.php
↓ なければ
archive.php
↓ なければ
index.php
という順番で探します。
つまり、
専用テンプレート → 汎用テンプレート
という考え方です。
WordPress公式のテンプレート階層でも、カテゴリーのスラッグに対応したテンプレートから、カテゴリー全体、アーカイブ、最終的には index.php へとフォールバックする仕組みが定義されています。
3. index.php は最後の「受け皿」
クラシックテーマを制作する場合、index.php は非常に重要なファイルです。
例えば、
single.php
page.php
archive.php
などの専用テンプレートが存在しない場合、最終的に index.php が使われます。
イメージすると、
専用テンプレート
↓
より汎用的なテンプレート
↓
index.php
という構造です。
そのため、
「全部のページに
index.phpが使われる」
という意味ではありません。
より適切なテンプレートが存在しない場合の最終的なフォールバック先
と考えると分かりやすいでしょう。
WordPress公式でも、クラシックテーマでは index.php がテンプレート階層の最終的なフォールバックとして機能すると説明されています。
4. 投稿ページは single.php
例えば通常のブログ記事、
/blog/wordpress-theme/
を表示する場合、一般的なクラシックテーマでは、
single.php
が使われます。
構造としては、
投稿
↓
single.php
↓
記事を表示
というイメージです。
ただし、さらに細かく専用テンプレートを作ることもできます。
例えば、
single.php
single-post.php
など、投稿タイプに応じてテンプレートを分けることができます。
さらにカスタム投稿タイプなら、
single-portfolio.php
のようなテンプレートを用意することもできます。
5. カスタム投稿タイプでは single-{post-type}.php
第4回で紹介した「制作実績」というカスタム投稿タイプを考えてみましょう。
投稿タイプのスラッグを、
portfolio
とします。
すると詳細ページでは、
single-portfolio.php
という専用テンプレートを用意できます。
例えば、
/blog/wordpress-theme/
↓
single.php
/portfolio/sample-site/
↓
single-portfolio.php
という使い分けができます。
これがカスタム投稿タイプを使う大きなメリットの一つです。
ブログ記事と制作実績では、
- レイアウト
- 表示項目
- ナビゲーション
- カスタムフィールド
- ギャラリー
などが異なることがあります。
そのため、テンプレートを分けて管理できます。
6. 固定ページは page.php
固定ページの場合は、
page.php
が基本となります。
例えば、
/about/
という「会社概要」ページがあった場合、
page.php
で表示できます。
しかし、固定ページもさらに細かく分けることができます。
例えばスラッグが、
about
なら、
page-about.php
というテンプレートを用意できます。
WordPressでは、固定ページに対して専用テンプレートが指定されていない場合、まず page-{slug}.php、次に page-{id}.php、その後 page.php などの順でテンプレートが検討されます。
つまり、
page-about.php
↓
page-123.php
↓
page.php
↓
singular.php
↓
index.php
というように、より具体的なテンプレートから探していきます。
7. カテゴリー一覧は archive.php だけではない
カテゴリー一覧ページも、テンプレート階層を理解すると分かりやすくなります。
例えば、
/category/wordpress/
というカテゴリーがあるとします。
カテゴリーのスラッグが wordpress なら、
category-wordpress.php
を用意できます。
なければ、
category.php
さらに、
archive.php
さらに、
index.php
へフォールバックします。
つまり、
category-wordpress.php
↓
category.php
↓
archive.php
↓
index.php
です。
これを理解しておくと、
「WordPressカテゴリーだけデザインを変えたい」
という場合に、
category-wordpress.php
を作ればよいことが分かります。
8. カスタムタクソノミーにもテンプレート階層がある
第4回で紹介したカスタムタクソノミーにも、専用テンプレートを用意できます。
例えば、
portfolio_category
というタクソノミーを作り、
web-design
というタームを登録したとします。
この場合、
taxonomy-portfolio_category-web-design.php
のような専用テンプレートを用意できます。
一般的なテンプレート階層では、
taxonomy-{taxonomy}-{term}.php
↓
taxonomy-{taxonomy}.php
↓
taxonomy.php
↓
archive.php
↓
index.php
というように、より具体的なテンプレートから探していきます。
9. アーカイブページとは?
WordPressでよく出てくる「アーカイブ」という言葉。
これは簡単に言えば、
複数のコンテンツを一覧表示するページ
です。
例えば、
- ブログ記事一覧
- カテゴリー一覧
- タグ一覧
- カスタム投稿タイプ一覧
- カスタムタクソノミー一覧
などがあります。
例えば「制作実績」というカスタム投稿タイプなら、
/portfolio/
という一覧ページを作り、
archive-portfolio.php
で表示する構成が考えられます。
すると、
制作実績一覧
↓
archive-portfolio.php
制作実績詳細
↓
single-portfolio.php
という関係になります。
この2つは、Web制作では非常によく使う組み合わせです。
10. single と archive の違いを理解する
ここは実務でも重要です。
single
1件のコンテンツを表示するページ
制作実績A
↓
single-portfolio.php
archive
複数のコンテンツを一覧表示するページ
制作実績A
制作実績B
制作実績C
↓
archive-portfolio.php
つまり、
一覧
↓
archive-portfolio.php
詳細
↓
single-portfolio.php
という関係です。
11. URLとテンプレートは「別の仕組み」
ここで一つ注意したいポイントがあります。
WordPressでは、
URLの構造とテンプレートの構造は同じものではありません。
例えば、
/portfolio/sample-site/
というURLがあったとしても、
portfolio/
sample-site.php
というファイルが存在するわけではありません。
WordPressがURLから「これは portfolio という投稿タイプの sample-site という投稿だ」と判断し、その結果としてテンプレート階層から、
single-portfolio.php
などを探します。
つまり、
URL
↓
WordPressがリクエストを解析
↓
投稿タイプ・タクソノミーなどを判断
↓
テンプレート階層を検索
↓
適切なテンプレートを選択
↓
HTMLを生成
という流れです。
この関係を理解すると、WordPressの内部構造がかなり見えやすくなります。
12. パーマリンクとは?
URLの構造を設定する仕組みとして、WordPressにはパーマリンクがあります。
例えば、
https://example.com/?p=123
という形式ではなく、
https://example.com/blog/wordpress/
のように、人間にも分かりやすいURL構造にすることができます。
一般的なWeb制作では、サイト構造に合わせて、
/blog/
/portfolio/
/service/
など、意味の分かりやすいURLを設計することが重要です。
ただし、URLは後から変更すると既存ページへのリンクや検索エンジンからの評価などに影響する可能性があります。
そのため、サイト制作の初期段階でURL構造を考えておくことが大切です。
13. カスタム投稿タイプでは「rewrite」も重要
カスタム投稿タイプを登録するときには、URLのベースとなるスラッグも設計できます。
例えば、
register_post_type(
'portfolio',
array(
'rewrite' => array(
'slug' => 'portfolio',
),
)
);
とすると、
/portfolio/sample-site/
のようなURL構造を作ることができます。
ここで、
portfolio
という投稿タイプの識別子と、
portfolio
というURL上のスラッグは、同じにする必要はありません。
例えば、
投稿タイプ
portfolio
URL
/works/
という設計も可能です。
これは、
管理上の名前と、ユーザーに見せるURLを分けて考えられる
ということでもあります。
14. テンプレートパーツで共通部分を分ける
テンプレート階層を理解したら、次に覚えておきたいのがテンプレートパーツです。
例えば、
header.php
footer.php
などです。
ページごとに同じHTMLを書くのではなく、
header.php
footer.php
として共通部分を分離します。
さらに、
template-parts/
content.php
content-single.php
content-portfolio.php
などに分けることもできます。
クラシックテーマでは get_template_part() を使ってテンプレートパーツを読み込むことができます。WordPress公式でも、テンプレートパーツは複数のテンプレートで再利用するための仕組みとして説明されています。
例えば、
get_template_part(
'template-parts/content',
'portfolio'
);
とすれば、
template-parts/content-portfolio.php
を読み込めます。
こうすることで、テーマのコードを整理しやすくなります。
15. ブロックテーマでもテンプレート階層は存在する
ここまで主にPHPファイルを例に説明してきましたが、ブロックテーマでもテンプレート階層という考え方は存在します。
大きな違いは、
クラシックテーマ → PHP
ブロックテーマ → HTML
という点です。
例えばブロックテーマでは、
templates/
├── index.html
├── single.html
├── page.html
├── archive.html
└── 404.html
といった構造になります。
WordPress公式でも、クラシックテーマとブロックテーマではファイル形式が異なるものの、テンプレート階層の考え方は共通していると説明されています。
ブロックテーマではテンプレートが /templates に配置され、index.html が基本となるフォールバックテンプレートです。
16. クラシックテーマとブロックテーマを比較すると
ここまでの内容を比較してみましょう。
| 役割 | クラシックテーマ | ブロックテーマ |
|---|---|---|
| メインテンプレート | index.php | index.html |
| 投稿詳細 | single.php | single.html |
| 固定ページ | page.php | page.html |
| アーカイブ | archive.php | archive.html |
| 404 | 404.php | 404.html |
| テンプレート | PHP | HTML+ブロック |
| 共通パーツ | template-parts など | parts |
| 編集方法 | PHP・コード中心 | Site Editor・ブロック中心 |
第3回で紹介したように、どちらが優れているというより、制作するサイトや運用方法に応じて選択することが重要です。
17. 実務で考える「ページとテンプレート」の関係
例えば企業サイトで、
固定ページ
├── 会社概要
├── サービス
└── お問い合わせ
投稿
└── ブログ
カスタム投稿タイプ
└── 制作実績
という構造を作ったとします。
テンプレート側では、
会社概要
↓
page-about.php
サービス
↓
page-service.php
ブログ記事
↓
single.php
制作実績一覧
↓
archive-portfolio.php
制作実績詳細
↓
single-portfolio.php
というように、それぞれの役割に応じたテンプレートを割り当てることができます。
ここまで設計できるようになると、
「WordPressでページを作る」
という考え方から、
「WordPressのデータ構造に合わせてページを設計する」
という考え方へ変わってきます。
これはオリジナルテーマ制作では非常に重要な視点です。
18. テンプレート階層を理解すると「どのファイルを編集すればいい?」が分かる
WordPressを触っていると、
「このページを変更したいけど、どのPHPを編集すればいい?」
という場面が必ず出てきます。
例えば、
ブログ記事の表示を変更したい
single.php
制作実績の詳細だけ変更したい
single-portfolio.php
制作実績一覧を変更したい
archive-portfolio.php
特定カテゴリーだけ変更したい
category-wordpress.php
会社概要ページだけ変更したい
page-about.php
というように考えられます。
つまりテンプレート階層は、
「WordPressのページが、どのテンプレートで表示されているのかを見つけるためのルール」
でもあります。
19. WordPress制作では「データ → URL → テンプレート」の順番で考える
ここまでの第3回〜第5回をつなげると、WordPressの仕組みがより分かりやすくなります。
まず、
① データを設計する
投稿
固定ページ
カスタム投稿タイプ
タクソノミー
カスタムフィールド
↓
② URLを設計する
/blog/
/portfolio/
/portfolio/sample-site/
↓
③ テンプレートを設計する
archive.php
archive-portfolio.php
single.php
single-portfolio.php
page.php
↓
④ デザイン・HTML・CSS・JavaScriptを実装する
という流れです。
この順番で考えると、WordPressサイトの設計がかなり整理されます。
20. まとめ|テンプレート階層はWordPress制作の「設計図」
今回のポイントをまとめると、
- WordPressにはテンプレート階層がある
- URLなどのリクエスト情報から表示するページの種類を判断する
- より具体的なテンプレートから探していく
- 見つからなければ、より汎用的なテンプレートへフォールバックする
single.phpは主に1件の投稿を表示するarchive.phpは複数のコンテンツを一覧表示するsingle-{post-type}.phpでカスタム投稿タイプの詳細を分けられるarchive-{post-type}.phpでカスタム投稿タイプの一覧を分けられるpage-{slug}.phpなどで特定の固定ページを分けられる- カテゴリーやタクソノミーにも専用テンプレートを作れる
index.phpは最終的なフォールバックとして機能する- ブロックテーマでもテンプレート階層の考え方は基本的に共通する
そして、WordPressのWeb制作では、
データ構造 → URL → テンプレート → デザイン
という順番で考えることが重要です。
第4回で紹介した「コンテンツ設計」と、今回の「テンプレート階層」がつながることで、WordPressを単なるCMSではなく、柔軟なWebサイト構築システムとして設計できるようになります。
次回はさらに実装に近づき、WordPressの表示を制御するうえで重要な 「ループ(The Loop)」と WP_Query を取り上げます。
「なぜWordPressは記事を一覧表示できるのか?」
「カスタム投稿タイプだけを取得するには?」
「条件に応じて記事を表示するには?」
といった疑問を、実際のコードを交えながら解説していきます。