WordPress Template Hierarchy

ワードプレスのテーマテンプレート(Wordpress Theme Template)久しぶりに作ろうと思い、今のテーマテンプレート階層がどうなっているかを調べました。文章を読むよりも画像が欲しかったのですが、web上には古いものしかなかったので新しく作り直しました

WordPress公式ページより>テーマ開発ハンドブック>Theme Basics>テンプレート階層

テーマテンプレートを作るときの手順

  1. ベースとなるテーマテンプレートをダウンロード。今回はUnderscores (_s)
  2. WordPressの新規テーマ制作は久しぶりなので、Underscoresのソースを解読
  3. 必要最低限のファイルのみを残し、削除
    • style.css: テーマの基本情報とスタイルを定義
    • index.php: メインのテンプレートファイル
    • functions.php: テーマの機能を追加
    • header.php: サイトのヘッダー部分
    • footer.php: サイトのフッター部分
    • single.php: 個別投稿ページ用
    • archive.php: アーカイブ用
  4. CSSはいつもCSSフレームワークを使っているのでUIKIT3をダウンロードし、Underscoresとマージ

テーマテンプレートの仕様変更を確認する

10年ぶりくらいの新規作成だったので、色々調べていくと、WordPress4.3(2015年8月)に「singular.php」が追加されていました。他にもないかと調べると結構変わってました。

  1. singular.php の追加(WordPress 4.3 / 2015年8月)
    • single.phppage.php の代替として追加
    • is_single()is_page() に適用される共通テンプレート
  2. theme.json の導入(WordPress 5.8 / 2021年7月)
    • ブロックテーマ(FSE: フルサイト編集)向けの設定ファイル
    • フォント、カラー、間隔などのスタイルを一元管理
    • functions.php でスタイルを管理する従来の方法に代わるもの
  3. フルサイト編集(FSE)の導入(WordPress 5.9 / 2022年1月)
    • index.php の代わりに テンプレートパーツをブロックで編集可能 に
    • header.phpfooter.php を 従来の PHP ではなくブロックエディタで作成 できる
    • template-parts/ ディレクトリ の使用が増加
  4. block-template の登場(WordPress 5.9 / 2022年1月)
    • block-template-parts/block-templates/ を使用するテーマ構造へ移行
    • header.phpfooter.php ではなく ブロックテンプレートで管理
  5. クラシックテーマとブロックテーマの分離(WordPress 6.1 / 2022年11月)
    • functions.php による従来の管理方法と、ブロックエディタの管理が明確に分離
  6. templates/ & parts/ ディレクトリの導入(WordPress 6.1 / 2022年11月)
    • template-parts/ の代わりに parts/ を使うブロックテーマが増加
    • templates/ 内に single.htmlarchive.html などを配置可能

singular.phpとsingle.phpの違い

テンプレート名適用されるページ優先順位
single.php投稿・postの個別ページsingle-{post-type}.php → single.php
page.php固定ページ・pageの個別ページpage-{slug}.php → page.php
singular.php投稿・post
固定ページ・page
single.php → singular.php
page.php → singular.php

投稿の個別ページと、固定ページのテンプレートを作るときには、single.phpとpage.phpのソースコードが同じことがよくありました。これを考えると、singular.phpで済むのはコードやファイルの重複を避けられます。

また、カスタム投稿タイプを作るとき、投稿シングルページと、カスタム投稿シングルページも同じソースコードの場合が多いので、これも簡単になります。

今まで 製品カスタム投稿(product)があった場合、single-product.phpと、一般投稿用のsingle.phpの2枚が必要でした。でもシングルページは同じデザインを使うことが多いのでsingular.php1枚ですむのは便利です。

さらにWordPressのテンプレート階層を整理すると、single.phpは一般投稿用、singular.phpはカスタム投稿、一般投稿、固定ページで使える、と整理できます。

他にも大きく変わったようですが、theme.jsonやブロックパーツのことを書き出すと非常に長くなるので、次回の宿題にします。

2024年現代のテンプレート階層

完全に手作りなので、たぶん間違えていないと思いますが、気になる個所があったらフォームで教えてくれると嬉しいです。

さいごに

WordPressのテンプレート階層は、この10年で大きく進化し、より柔軟で効率的な構造へと変化してきたようです。

特に singular.php の追加や theme.json の導入、フルサイト編集(FSE)の実装など、テーマ開発の手法も大きく変わっています。

今後も WordPress は進化を続けるため、最新の仕様を押さえながら開発を進めることが重要です。今回の整理が、テーマ作成やカスタマイズの参考になれば幸いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です