WordPressで固定ページのテンプレートが表示されない原因と解決方法

WordPress(ワードプレス)

カスタムページテンプレートを用意したのに、固定ページの編集画面に「テンプレート」の選択プルダウンが出てこない。あるいは出てはいるのに、自分で作ったテンプレートだけが一覧に並ばない。私も一度これにハマって、しばらく原因が分からず首をかしげていました。

ファイルは間違いなく作ったはずなのに認識されない。この手のトラブルは、たいてい「WordPressがテンプレートをどう見つけているか」を押さえると一気に見通しがよくなります。ここでは仕組みを整理したうえで、私が実際に引っかかった原因までまとめておきます。

関連記事:WordPressのトップページ、front-page.phpとindex.phpの違いと使い分け

そもそもカスタムテンプレートはどう認識されるのか

カスタムページテンプレートを作るときは、PHPファイルの先頭に次のようなコメントヘッダーを書きます。

<?php /* Template Name: archive-news */ ?>

WordPressは、有効化中のテーマ内にあるテンプレートファイルを走査して、この「Template Name」というコメントを探します。見つかると、そのファイルをカスタムテンプレートとして登録し、固定ページ編集画面のプルダウンに表示する、という流れです(WordPress公式のテーマハンドブック「Page Template Files」およびget_page_templates関数のリファレンスに記載があります)。

つまり、プルダウンに出るかどうかは「Template Nameのコメントを正しく書けているか」と「そのファイルをWordPressが走査できる場所に置けているか」の2点にほぼ集約されます。ここがズレていると、ファイル自体は存在しても認識されません。

表示されない主な原因

順番に切り分けていくと、原因はだいたい次のどれかに当てはまります。

1. Template Name の書き方がずれている

ありがちなのがコメントの書き間違いです。Template Name:のスペルミス、全角コロンの混入、コメントを閉じる*/の抜けなど、ほんの少しの崩れで認識されなくなります。まずはこのヘッダーを疑うのが鉄則です。

2. ファイルの置き場所が合っていない

配置にもルールがあります。汎用的に使い回すテンプレートは、テーマ直下だけでなくpage-templatesというサブフォルダに入れても認識されます。WordPressはこのフォルダ名を特別に見に行くので、整理用に使うと便利です。

ただし例外があって、特定のページ専用に作るpage-{スラッグ}.phppage-{ID}.phpのような使い切りのテンプレートは、サブフォルダに入れると認識されません。これらはテーマのルート直下に置く必要があり、子テーマを使っている場合は親テーマ側に置いても拾われません。この違いは公式ハンドブックでも明記されています。

3. 対象の投稿タイプが絞られている

WordPress 4.7以降は、ページテンプレートを固定ページ以外の投稿タイプにも使えるようになりました。その代わりTemplate Post Typeというヘッダーで対象を指定できます。

<?php
/*
Template Name: 全幅レイアウト
Template Post Type: post, page
*/
?>

もしこの行で対象をpostだけに絞っていると、固定ページ側のプルダウンには当然出てきません。指定した投稿タイプと、いま編集している画面が噛み合っているかを確認します。

4. キャッシュやプラグインの影響

ファイルは正しいのに反映されない場合、キャッシュ系プラグインやサーバーキャッシュが古い状態を返していることもあります。編集画面を再読み込みしても変わらないなら、一度キャッシュをクリアしてみると解決することがあります。

私のケースは style.css が無かったことが原因だった

ここまでの基本を全部確認しても、私の環境ではテンプレートが出てきませんでした。ファイルの中身もヘッダーも問題ない。おかしいなとテーマフォルダを覗いて、ようやく気づきました。そのテーマフォルダにstyle.cssが無かったのです。

style.cssを設置したとたん、固定ページ編集画面のプルダウンにカスタムテンプレートがきちんと並ぶようになりました。原因としては地味ですが、盲点になりやすいポイントだと思います。

なぜ style.css が無いとテンプレートが認識されないのか

WordPressのテーマにとって、style.cssは単なるスタイルシートではありません。公式のテーマ構造のドキュメントでも、テーマとして認識されるために必要なファイルとして挙げられています。

ポイントは、style.cssの先頭に書くテーマヘッダーです。

/*
Theme Name: Sample Theme
Author: Example
Version: 1.0
*/

このTheme Nameがあることで、WordPressはそのフォルダを一つの「テーマ」として認識します。逆に言うと、style.cssが無い(あるいはヘッダーが欠けている)と、フォルダはテーマとして正しく扱われず、テンプレートの走査もうまく働かないことがあります。私が引っかかったのはまさにこれでした。

テーマを自作・カスタマイズするときは、最低限このあたりを用意しておくと安心です。

  • style.css(Theme Nameヘッダー付き)
  • index.php
  • functions.php(必要に応じて)

WordPress 6.x・ブロックテーマの場合は少し事情が違う

ここまではPHPで作るクラシックテーマの話です。WordPress 6系で主流になったブロックテーマでは、テンプレートの扱いが変わります。テンプレートはtemplatesフォルダに置いたHTMLファイルで管理され、サイトエディター(外観 > エディター)から編集する形が基本です。

そのため、ここで紹介した「Template Nameコメントで固定ページのプルダウンに出す」やり方は、主にクラシックテーマ向けの話になります。いま使っているテーマがブロックテーマなら、プルダウンではなくサイトエディター側でカスタムテンプレートを作る、と切り替えて考えてください。自分のテーマがどちらなのかを最初に確認しておくと、遠回りせずに済みます。

最後に確認したいチェックリスト

固定ページのテンプレートが表示されないときは、次の順で見ていくと原因を絞りやすいです。

  • テンプレートファイルにTemplate Nameのコメントが正しく書けているか
  • 使い切りのテンプレートをテーマ直下に置けているか(サブフォルダ・親テーマは不可)
  • Template Post Typeで対象投稿タイプを絞りすぎていないか
  • テーマフォルダにstyle.css(Theme Nameヘッダー付き)があるか
  • 目的のテーマが正しく有効化されているか、子テーマの取り違えはないか
  • キャッシュが古い状態を返していないか
  • そもそもブロックテーマではないか(その場合はサイトエディターで作る)

WordPressは柔軟な分、ファイル構成やテーマ仕様の細かな前提でつまずきがちです。テンプレートが出てこないときは、派手な原因よりも、今回のstyle.cssのような足元のファイルを一度疑ってみると近道になることが多いです。