ミギムキ

[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です。