先日、Wordpressの固定ページのテンプレートを作成して子テーマに追加しました。
しかし、なぜかテンプレート選択のプルダウンに追加したテンプレート名が出てきません。
作り方は合っているはず、しかし何度やっても出てこない。
この記事は、固定ページのテンプレートをネットで検索してその通りに作ってみたけど、なぜかテンプレートファイルが認識されていない気がするという人に役立つかもしれない内容になっています。
テンプレート名が表示されない理由はシンプルでした
結論から申しますと、『テンプレート名が日本語』の場合は、固定ページのテンプレートファイルの『文字コードがUTF-8』じゃないといけません。
以下、実際の作業工程をまとめています。
固定ページのテンプレートファイルの作り方
まずファイル名
固定ページのファイル名の命名規則をみると、次の2通りあります。
- page-スラッグ名.php
- 任意のファイル名.php
page-スラッグ名.phpを使う場合
page-スラッグ名.phpを使う場合は、スラッグと連携させる場合です。
例えば、スラッグ名にprofileと指定した時に、page-profile.phpと言うテンプレートファイルがあれば、そちらが『デフォルトテンプレート』になります。
任意のファイル名.phpを使う場合
次に、任意のファイル名.phpを使う場合は、スラッグと連携させない場合です。
テンプレートを追加する場合は、このファイル名になります。
この場合はファイル名は何でもいいので、スラッグの影響は受けません。固定ページのテンプレート選択プルダウンメニューに表示されるようになります。
ファイルを置く場所
テーマフォルダの中であればどこでも探してくれます。
子テーマの場合は、子テーマの直下でもいいですし、親テーマの場合も親テーマの直下でも大丈夫です。
ディレクトリを作って、そこに格納しておいても探して読み込んでくれます。
固定ページ (page 投稿タイプ) の表示に使用されるテンプレートファイル。
- カスタムテンプレートファイル – ページ作成画面の「テンプレート」ドロップダウンメニューで選択したテンプレート名。get_page_templates()参照。
- page-{slug}.php – 固定ページのスラッグが recent-news ならば WordPress は page-recent-news.php を探す。
- page-{id}.php – 固定ページIDが 6 ならば WordPress は page-6.php を探す。
- page.php
- singular.php
- index.php
この関数は現在有効なテーマに含まれる使用可能なページテンプレートを返します。現在のテーマのテンプレートファイルすべてを対象に、コメント Template Name: テンプレート名
を検索します。
テンプレートファイルの中身
page.phpをコピーして作成するのが基本的な作法です。
その時、固定ページのテンプレートファイルの先頭にコメントをつけるのがルールになっています。
テンプレート名は日本語でも英語でも大丈夫です。
ファイル名と一緒でなくても構いません。
内容は以下の通りです。
<?php
/*
Template Name: テンプレート名
*/
固定ページの編集画面で追加したテンプレートプルダウンに表示されない
テンプレート名に日本語を使っている場合は、ファイルの文字コードがUTF-8じゃないとプルダウンメニューで文字が出てこないようです。英語のテンプレート名の場合は文字コードの影響を受けませんが、日本語の場合はダメなようです。
UTF-8で保存しなおしてアップロードすれば表示されるようになりました。
まとめ
最近日本語を使う時でも文字コードを意識することがあまりなかったのでなかなか気が付きませんでした。
久々に文字コードの影響を受けました。元ファイルがUTF-8であればコピーしてもそのままのコードになりますが、新規ファイルとして作成してしまうと、Shift-JISで保存されてしまいました。
そろそろ秀丸エディタとかの国産エディタ使うのやめた方が良いのかもしれません。