[WordPress] 投稿のテンプレートファイルをスラッグ名で切り替えたい
固定ページのテンプレートファイルは「page-xxx.php」といった形で、スラッグ付きのファイルを作成することで専用のテンプレートを適用することができます。
しかし標準の「投稿」についてはこのような形ではテンプレートファイルを作ることができません。
(テンプレート階層図:引用元)
あまり想定されるケースではありませんが、投稿のテンプレートファイルをスラッグ名で切り替える方法を検討してみました。
サンプルコード(single.php)
<?php
global $post;
switch($post->post_name) {
case 'xxxxx':
get_template_part('single', 'xxxxx');
break;
case 'yyyyy':
get_template_part('single', 'yyyyy');
break;
default:
get_template_part('single', 'default');
}
?>
まず、デフォルトの「single.php」をコピーして「single-default.php」というファイルを作成します。
その上で「single.php」の内容を上記サンプルコードで上書きします。
サンプルコードでは表示する投稿のスラッグ名を「$post->post_name」で参照し、switch文で分岐させています。「xxxxx」というスラッグの投稿であれば「single-xxxxx.php」というテンプレートファイルを「get_template_part」で呼び出します。
いずれの条件にも該当しなかった場合は、コピペで作成した「single-default.php」が呼び出されます。
カスタム投稿の場合
カスタム投稿の場合は上記のような分岐用のコードを用意する必要はありません。
「single-[カスタム投稿タイプのスラッグ]-[カスタム投稿のスラッグ].php」という形式でファイルを作成することでテンプレートファイルが呼び出されます。
例えば「product」というカスタム投稿タイプ内に「iphone」というスラッグ名で作成した投稿用のテンプレートであれば「single-product-iphone.php」というファイルを作成すればOKです。
ご質問など受け付けています
記事の中でわかりにくかったところ、もっと知りたかったこと、間違っていることなど、何でもお気軽にご連絡ください。
ご連絡は下記フォームを利用いただくか、ツイッターアカウント@flat8migi宛てでもOKです。