[WordPress管理画面] カスタム投稿+カスタムフィールドがプレビューで表示されない?固定ページでの注意点と対処法
WordPressでは、カスタム投稿タイプとカスタムフィールドの情報を、固定ページのテンプレート内で読み込む構成が実務でよく使われます。
しかし、いざ「プレビュー」機能を使って確認しようとすると、
・なぜか archive.php のテンプレートが使われている?
・中身が表示されない
といった、混乱した状況になることがあります。
本記事では、状況別に「なぜプレビューで表示されないのか?」を整理しながら、その原因と正しい対処法をわかりやすく解説します。
よくある2つのケース
ケース①:カスタム投稿タイプ単体をプレビューする場合
例:「生徒情報」などのカスタム投稿に直接アクセスしてプレビュー
この場合、投稿自体のプレビューは可能です。テンプレート階層に従い、single-{post_type}.php が使用されます。
ただし、該当テンプレートが存在しない場合、WordPressは代替テンプレート(たとえば archive.php や index.php)を使用しようとします。
その結果、投稿内容は表示されても、テンプレートが「生徒情報用」のものではなくなってしまいます。
▼プレビューが正常にされない例
本文は表示されるが、archive.php のレイアウトが適用されてしまう。
ケース②:固定ページテンプレートに、カスタム投稿+カスタムフィールド情報を読み込む場合
例:page-staff.php で、カスタム投稿「staff-data」の一覧を表示。カスタムフィールド情報も含む
この場合、一見 archive.php ベースの見た目になりますが、the_content() やカスタムフィールドの内容は表示されません。
「空白のページが出てきた?」と感じることもあるでしょう。
▼プレビューが正常にされない例
archive.php のレイアウトだけが適用され、本文やカスタムフィールドの情報が一切表示されない。
原因:テンプレート階層の混乱
WordPressには、表示対象に応じたテンプレート階層のルールがあります。
以下は、その一例です。
表示対象 | 使用されるテンプレート例 |
---|---|
固定ページ | page.php、page-{slug}.php |
カスタム投稿(一覧) | archive-{post_type}.php |
カスタム投稿(詳細ページ) | single-{post_type}.php |
固定ページテンプレートは、本来その「固定ページ自体の内容」を表示するためのものであり、他の投稿タイプ(=カスタム投稿)の個別情報を直接表示することを想定していません。
そのため、page-staff.php のようなテンプレートでカスタム投稿「staff-data」の情報を読み込んでも、プレビュー時には WordPress が「この投稿をどう扱えばいいか」迷ってしまい、正しく表示できないのです。
解決方法①:single-{カスタム投稿スラッグ}.php を用意する
カスタム投稿自体の表示(個別ページ)に対応したい場合は、専用のテンプレートファイル single-{post_type}.php を作成しましょう。
対処手順
1. 対象カスタム投稿タイプのスラッグを確認(例:staff-data)
2. テーマフォルダ内に single-staff-data.php を作成
3. このファイルに、カスタムフィールドの内容を出力するコードを記述
4. プレビューすると、正しく内容が表示されるようになる
この方法のメリット
・プレビュー時にも WordPress が正しいテンプレートを適用
・カスタム投稿の本文・カスタムフィールドが正しく表示される
解決方法②:固定ページではなく、アーカイブテンプレートを利用する
もし「固定ページでカスタム投稿を一覧表示したい」という意図で page-xxx.php を使っているのであれば、代わりに archive-{post_type}.php を使うほうがシンプルかつ確実です。
なぜアーカイブテンプレートを使うべきか?
・archive-{post_type}.php は、カスタム投稿の一覧表示のために用意された正式なテンプレート
・URL構造も /staff-data/ のように整理される
・プレビューも正しく機能する
補足:どうしても固定ページで一覧を出したい場合
以下のようなアプローチも検討できます。
・固定ページの本文内でショートコードを使って出力
・プラグイン(例:PODS、ACF Blocks)を活用して、ブロックとして表示
まとめ
WordPressでカスタム投稿+カスタムフィールドを扱う際、プレビュー時の挙動はテンプレート階層のルールに大きく左右されます。
思ったとおりに表示されないときは、テンプレート階層の構造に立ち返って見直してみましょう。