【WordPress】ページテンプレートが表示されない?ここを確認!

以前、ページテンプレートでハマったことがあったのを思い出したのでメモしておきます。
※先ほど「投稿でテンプレートが表示されないなぁ」と思ったのですが、「あ、そういえば…」と思い出しました

ページテンプレートとは

<?php
/*
Template Name: template
*/
?>

↑のような記述があるphpファイルをWordpressのthemeのフォルダ内に入れるとそのファイルをテンプレートとして使用できるものです。記述する位置は文頭だと思い込んでいたのですが、ファイルの一番下に書いてもテンプレートは表示されました。

「template」は何でもOKです。日本語でも大丈夫です。

引用:WP、Firefoxにてキャプチャ

↑のような感じで表示されます。

「テンプレート」が表示されない?

さて、本題です。

<?php
/*
Template Name: template
*/
?>

こちらを記述していても属性に「テンプレート」が表示されない場合があります。具体的にいうと、「固定ページ」では表示されるが「投稿」では表示されないのです。

理由は簡単です。
実は「Template Post Type」という設定があり、未設定の場合はデフォルトで「page」が設定されます。投稿タイプが「page」つまり固定ページなので、「テンプレート」は固定ページしか表示されないというわけです。

対応方法

<?php
/*
Template Name: template
Template Post Type: post
*/
?>

対応方法も簡単で、「Template Post Type」に「post」を指定すればOKです。

引用:WP、Firefoxにてキャプチャ

投稿でも「テンプレート」が表示されました。赤枠を見てもらうと「投稿の属性」となっています。※先ほどの画像を見てみてください。ページ属性になっているかと思います。

複数の投稿タイプに対応する

<?php
/*
Template Name: template
Template Post Type: post
*/
?>

一つ注意点です。
上のように設定すると「投稿(post)」では「テンプレート」が表示されますが、「固定ページ(page)」では表示されません。どちらにも表示させたい場合は、下記のように「Template Post Type」に半角カンマ区切りで2つ記述すればOKです。

<?php
/*
Template Name: template
Template Post Type: post,page
*/
?>

これで「固定ページ」と「投稿」のどちらにも「テンプレート」を表示できました。更にカスタム投稿タイプを作成している場合も同様です。作成した投稿タイプのスラッグを書き足せばOKです。

<?php
/*
Template Name: template
Template Post Type: post,page,works
*/
?>

これで「works」という投稿タイプにも「テンプレート」が表示されます。

最後に

一度覚えると二度目はハマりにくい内容ですが、最初は謎に少しハマるのかなと。