以前、ページテンプレートでハマったことがあったのを思い出したのでメモしておきます。
※先ほど「投稿でテンプレートが表示されないなぁ」と思ったのですが、「あ、そういえば…」と思い出しました
ページテンプレートとは
<?php /* Template Name: template */ ?>
↑のような記述があるphpファイルをWordpressのthemeのフォルダ内に入れるとそのファイルをテンプレートとして使用できるものです。記述する位置は文頭だと思い込んでいたのですが、ファイルの一番下に書いてもテンプレートは表示されました。
「template」は何でもOKです。日本語でも大丈夫です。
↑のような感じで表示されます。
「テンプレート」が表示されない?
さて、本題です。
<?php /* Template Name: template */ ?>
こちらを記述していても属性に「テンプレート」が表示されない場合があります。具体的にいうと、「固定ページ」では表示されるが「投稿」では表示されないのです。
理由は簡単です。
実は「Template Post Type」という設定があり、未設定の場合はデフォルトで「page」が設定されます。投稿タイプが「page」つまり固定ページなので、「テンプレート」は固定ページしか表示されないというわけです。
対応方法
<?php /* Template Name: template Template Post Type: post */ ?>
対応方法も簡単で、「Template Post Type」に「post」を指定すればOKです。
投稿でも「テンプレート」が表示されました。赤枠を見てもらうと「投稿の属性」となっています。※先ほどの画像を見てみてください。ページ属性になっているかと思います。
複数の投稿タイプに対応する
<?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」という投稿タイプにも「テンプレート」が表示されます。
最後に
一度覚えると二度目はハマりにくい内容ですが、最初は謎に少しハマるのかなと。
スポンサーリンク