2026年9月24日
2026年9月24日
WordPressのテーマテンプレートエラーを解決する方法|「テンプレートがありません」と反映されない問題
WordPress のテーマまわりで「テンプレート」に関するエラーが出たときは、大きく分けて「テーマとして認識されない(壊れているテーマ・インストール失敗)」「テンプレートが選べない、反映されない」「テンプレートの中で PHP エラーが起きる」の3種類があります。表示されたメッセージと症状からどれに当たるかを見分け、テーマのフォルダ構成、ファイルヘッダー、テンプレートの読み込み先を順に確かめれば、多くは設定やファイル配置の修正で直ります。この記事では、それぞれの症状の読み方と、可能性の高い順に原因の確認方法と直し方を説明します。
作業の前には、テーマフォルダとデータベースのバックアップを取ってください。本番サイトで試行錯誤すると表示が崩れたままになることがあるので、可能ならステージング環境で確かめてから反映します。
症状1:テーマのアップロードで失敗する
管理画面の「テーマを追加」から zip をアップロードしたとき、「テーマに style.css スタイルシートが含まれていない」「必要なテンプレートファイルが無い」という趣旨のメッセージでインストールに失敗する場合は、zip の中身の構成が原因であることがほとんどです。
よくある原因は次の2つです。
- 配布パッケージ全体をアップロードしている:有料テーマのマーケットプレイスなどからダウンロードした zip には、説明書やデモデータと一緒に「テーマ本体の zip」が入っていることがあります。アップロードするのは中にある本体の zip です。
- フォルダが二重になっている:zip を展開して作り直した際に、
mytheme/mytheme/style.cssのように一段深くなっていると認識されません。zip を開いたとき、最上位のフォルダの直下に style.css があることを確かめます。
テーマとして認識されるには、フォルダ直下に style.css があり、さらにクラシックテーマなら index.php、ブロックテーマなら templates/index.html が必要です。管理画面からのアップロードがうまくいかない場合は、FTP で wp-content/themes/ に展開済みのフォルダを置く方法もあります。
症状2:「壊れているテーマ」に表示される
「外観」→「テーマ」画面の下部に「壊れているテーマ」という一覧が出て、その説明欄に「スタイルシートがありません」「テンプレートがありません」「親テーマが見つかりません」といった趣旨の文言が表示される場合は、テーマのフォルダは存在するのに、WordPress がテーマとして読み込めない状態です。
「テンプレートがありません」の場合
テーマ単体として必要なファイル(クラシックテーマの index.php、ブロックテーマの templates/index.html)が無いか、子テーマとして作ったのに style.css に Template: の行が無いことが原因です。子テーマのつもりなら、style.css の先頭のコメントに親テーマを指定します。
/*
Theme Name: My Child Theme
Template: twentytwentyfive
*/
「親テーマが見つかりません」の場合
子テーマの Template: に書いた値と、実際の親テーマのフォルダ名が一致していません。ここで指定するのは親テーマの表示名ではなく、wp-content/themes/ の中のフォルダ名です。たとえば「Twenty Twenty-Five」ではなく twentytwentyfive と書きます。サーバーによっては大文字と小文字も区別されるので、フォルダ名をそのまま写してください。親テーマ自体を削除してしまった場合は、同じものをインストールし直します。
「スタイルシートがありません」の場合
フォルダ直下に style.css が無いか、ファイル名が違う(Style.css、style.css.txt など)ことが原因です。FTP ソフトでファイル名を確認し、パーミッションの問題で読み込めない場合もあるため、ほかのテーマのファイルと同じ権限になっているかも見ておきます。
症状3:ページテンプレートが選択肢に出ない
自作のページテンプレートが、固定ページの編集画面のテンプレート選択に出てこない場合は、ファイルの先頭にあるヘッダーを確認します。
<?php
/*
* Template Name: ランディングページ
* Template Post Type: page, post
*/
Template Name: が無いと、WordPress はそのファイルをページテンプレートとして扱いません。固定ページ以外(投稿やカスタム投稿タイプ)で選べるようにするには、Template Post Type: に投稿タイプ名を並べます。
ヘッダーが正しいのに出てこない場合は、テーマのファイル一覧がキャッシュされている可能性があります。永続オブジェクトキャッシュ(Redis など)を使っている環境では、キャッシュを削除すると反映されることがあります。ブロックテーマでは、PHP のページテンプレートではなく、templates/ 内の HTML テンプレートと theme.json の customTemplates で選択肢を定義する仕組みなので、テーマの種類に合った方法で作っているかも確かめてください。
症状4:テンプレートファイルを編集しても反映されない
これは原因が複数考えられるため、まず「実際にどのテンプレートが使われているか」を確かめます。Query Monitor プラグインを入れると、表示中のページで使われたテンプレートファイルを確認できます。コードで確かめるなら、ステージング環境で次のように記録します。
// 子テーマの functions.php などに一時的に追加し、確認後に削除する
add_filter( 'template_include', function ( $template ) {
if ( current_user_can( 'manage_options' ) ) {
error_log( 'template: ' . $template );
}
return $template;
}, 999 );
WP_DEBUG_LOG を有効にしていれば、wp-content/debug.log に使われたファイルのパスが残ります。そのうえで、次の原因を順に確認します。
ファイル名がテンプレート階層に合っていない
WordPress は URL の種類ごとに決まった順番でテンプレートを探します。たとえばカスタム投稿タイプ product の個別ページなら single-product.php、無ければ single.php、さらに無ければ singular.php、最後に index.php という順です。ファイル名の綴りや投稿タイプ名が違うと、意図しない別のテンプレートが使われます。
ブロックテーマのサイトエディターで編集した内容が優先されている
ブロックテーマでは、サイトエディターでテンプレートを一度でも編集して保存すると、その内容がデータベースに保存され、テーマの templates/ 内のファイルより優先されます。そのため、ファイルを書き換えても画面が変わりません。サイトエディターで該当テンプレートを開き、カスタマイズをリセットする操作をすると、テーマのファイルの内容に戻ります。リセットの項目名や場所は WordPress のバージョンによって異なるため(2026年10月現在)、お使いの画面で確認してください。リセットすると編集内容は失われるので、残したい部分は先に控えておきます。
子テーマで上書きできない読み込み方をしている
子テーマに親テーマと同じ名前のテンプレートを置くと、通常は子テーマのものが使われます。ただし、親テーマが get_template_directory() を使って特定のファイルを直接読み込んでいる場合は、子テーマに同名ファイルを置いても上書きされません。その場合は、親テーマが用意しているフックやフィルターを使うか、そのファイルを読み込んでいるテンプレート自体を子テーマで上書きします。
キャッシュが古い表示を返している
キャッシュプラグイン、サーバーのキャッシュ、CDN のいずれかが古い HTML を返していることもあります。順にキャッシュを削除し、ログアウトした状態やシークレットウィンドウで確認します。
症状5:テンプレートの中で PHP エラーが起きる
テンプレートを編集した直後に「このサイトで重大なエラーが発生しました」と表示される場合は、編集したファイルに PHP の構文エラーや存在しない関数の呼び出しがあります。WordPress 5.2 以降はリカバリーモードの仕組みがあり、管理者のメールアドレスにエラーの内容とリカバリーモード用のリンクが届くことがあります。メールが届かない場合は、デバッグログに記録された Fatal error のファイル名と行番号を確認します。
管理画面に入れないときは、FTP で編集前のファイルに戻すのが早い方法です。テーマ全体が原因でどうにもならない場合は、wp-content/themes/ 内のそのテーマのフォルダ名を一時的に変更すると、WordPress はインストール済みのデフォルトテーマ(Twenty Twenty-Five など)に切り替えようとします。デフォルトテーマが一つも入っていないと切り替え先が無いので、普段から一つは残しておくと安心です。
なお、get_template_part() は指定したファイルが見つからなくてもエラーにはならず、何も表示されないだけです(WordPress 5.5 以降は戻り値が false になります)。「エラーは出ないのに一部が表示されない」ときは、スラッグの綴りとファイルの場所を確認してください。
まとめ
- テーマテンプレートのエラーは、「テーマとして認識されない」「テンプレートが選べない・反映されない」「テンプレート内の PHP エラー」に分けて考えます。
- アップロード失敗は zip の構成、壊れているテーマは style.css と index.php(ブロックテーマは templates/index.html)、子テーマの
Template:を確認します。 - 反映されないときは、実際に使われているテンプレートを Query Monitor や
template_includeで確かめ、テンプレート階層、サイトエディターでの編集、子テーマの上書き可否、キャッシュを順に見ます。 - 作業前にバックアップを取り、変更はステージング環境で試してから本番に反映します。