WordPressの固定ページに「このページだけ特別なPHPコードを入れたい」という場面が実務では結構な頻度であります。
たとえば、
- お問い合わせフォームにカスタムデータを渡したい
- 特定ページだけレイアウトを変えたい
- ブロックエディタでは対応していない動的なデータを表示させたい
といったケースです。
そのときに使うのが固定ページテンプレート。
子テーマにPHPファイルを1つ追加するだけで作れます!
固定ページテンプレートとは

WordPressの固定ページには、ページごとに「どのテンプレートファイルで表示するか」を選択する機能があります。
デフォルトは page.php が表示されるようになっていますが、「独自のテンプレートファイル」を子テーマに置くと、管理画面から選べるようになります。
PHPを直接書けるので、動的なデータの取得・出力が必要なページに向いています。
この独自テンプレートファイルの作成は、開発では基本中の基本の作業ですが、毎回うっかり「あれ?どうやるんだっけ?」と忘れがちなので(笑)、備忘兼ねてコピペ可形式で以下に残しておきます!
前提:子テーマ使用がおすすめ!
- 子テーマを使用していること
- FTPまたはファイルマネージャー等で子テーマフォルダにアクセスできること
オリジナルテーマであれば、子テーマ使用ではなくても大丈夫ですが、既存テーマ(有料・無料問わず)を使用している場合は、必ず子テーマで作業するようにしてください。
子テーマを使っていない場合、テーマのアップデートでファイルが上書きされる可能性も無きにしもあらずだからです。
作成手順
STEP 1:テンプレートファイルを作成する
子テーマのフォルダ(例:/wp-content/themes/テーマ名-child/)に、任意のファイル名でPHPファイルを作成します。
ファイル名の例:
- page-order.php(注文フォーム用)
- page-custom.php(汎用カスタムページ用)
ファイル名は page- で始める必要はありませんが、慣習的に page- を付ける人が多いです。
STEP 2:テンプレートヘッダーコメントを記述する
作成したファイルの先頭に以下のコメントを記述します。これがないとWordPressがテンプレートとして認識しません。
<?php
/*
* Template Name: 注文ページ
*/
Template Name: の後ろに書いた名前が、管理画面の「テンプレート」選択肢に表示されます。
日本語でも英語でも問題ありません。
STEP 3:テンプレートの中身を書く
テンプレートコメントの後に、ページのHTMLを出力するPHPを書きます。最低限の構成は以下の通りです。
<?php
/*
* Template Name: 注文ページ
*/
get_header(); // ヘッダーを出力
?>
<main>
<?php
// ここにページ固有のPHPコードを書く
// 例:カスタム投稿タイプからデータを取得して変数に入れるなど
?>
<div class="container">
<?php
// 固定ページの本文(Gutenbergで書いた内容)を出力
while (have_posts()) {
the_post();
the_content();
}
?>
</div>
</main>
<?php get_footer(); // フッターを出力?>get_header() と get_footer() はテーマのヘッダー・フッターをそのまま読み込みます。
これを書いておくことで、ナビゲーションやサイドバーなどの共通部分を維持しつつ、ページ固有のコードを差し込めます。
the_content() を書くと、固定ページの編集画面(Gutenberg)で書いた本文も出力されます。
ContactForm7のフォームショートコードをページ本文に書いておけば、そこで表示されます。
STEP 4:管理画面でテンプレートを選択する
- WordPress管理画面 → 固定ページ → 対象ページを編集
- 右サイドバーの「テンプレート」ドロップダウンを開く
- STEP2で設定した名前(例:「注文ページ」)を選択
- 更新して保存

これでそのページだけ、作成したテンプレートで表示されるようになります!
応用編:PHPコードをテンプレートに追加する場合
固定ページにカスタムPHPコード(データ取得など)を入れたい場合は、get_header() の後・本文出力の前に書きます。
<?php
/*
* Template Name: 注文ページ
*/
get_header();
// ▼ ここにページ固有のPHPを追加する
$my_data = get_posts(['post_type' => 'my_custom_type', 'numberposts' => -1]);
$my_json = json_encode($my_data, JSON_UNESCAPED_UNICODE);
// ▲ ここまで
?>
<main>
<div class="container">
<?php while (have_posts()) { the_post(); the_content(); } ?>
</div>
</main>
<?php get_footer(); ?>取得したデータはPHP変数に入れて、<script> タグ内でJavaScriptに渡すことができます。
<script>
const myData = <?php echo $my_json; ?>;
</script>これを応用として使えば、ブロックエディタだけでは難しい、様々なデータの動的表示を行うことが可能です!
うまくいかないときは
テンプレートが管理画面のドロップダウンに表示されない…
原因として多いのが、Template Name: のコメント書き方のミスです。
- <?php の直後に /* がきていない(途中に改行や空行が入っている)
- Template Name: のコロンの後ろにスペースがなく名前がくっついている
- ファイルが子テーマフォルダではなく親テーマフォルダに入っている
- ファイルの文字コードがUTF-8以外になっている
STEP2のコードをそのままコピペして使うのが一番確実です。
ページを開くとレイアウトが崩れる・真っ白になる
get_header() または get_footer() を書き忘れていると、テーマのCSSが読み込まれずレイアウトが壊れます。
また、PHPシンタックスエラーがあると画面が真っ白になるか「重大なエラーが発生しました」という画面になります。
- get_header(); と get_footer(); が両方記述されているか確認する
- PHPコードに記述ミス(セミコロン抜け・括弧の対応ズレ)がないか確認する
テンプレートを選択して保存したのに反映されない
「テンプレート」ドロップダウンで選択した後、「更新」ボタンを押してページを保存するのを忘れているケースが意外と多いです。選択するだけでは保存されません。
キャッシュ系プラグインを入れている場合は、保存後にキャッシュをクリアしてから確認してください。
子テーマが有効になっているか確認したい
WordPress管理画面 → 外観 → テーマ で現在有効なテーマを確認できます。
テーマ名の末尾に「Child」「子テーマ」などが付いているものが子テーマです。
子テーマそのものが有効化されておらず、親テーマが有効化されているケースも考えられます。
まとめ
| 手順 | 内容 |
|---|---|
| STEP1 | 子テーマに任意のPHPファイルを作成 |
| STEP2 | Template Name: コメントをファイル先頭に記述 |
| STEP3 | get_header() / get_footer() と必要なPHPを記述 |
| STEP4 | 管理画面の固定ページ編集画面でテンプレートを選択 |
プラグイン不要・子テーマに1ファイル追加するだけで完結します!
特定ページだけ動的なデータを扱いたい場面で活用してくださいね。

WordPressのアップデートで動作が変わる可能性があります。
お困りのことがあればコメントでお知らせください!

