僕よりもはるかにスキルの高い方から、スカイプで「single.php」でスラッグ毎にデザインを変えたいが、どうしてる?」的な質問が来ました。
まず人の話を基本よく聞かない私は、まずスラッグとカテゴリーを混同したりして、頭の中で、「え、single-slug.phpでいけるんとちゃうん」と、単純に思ってしまったので、そのまま返してしまったのですが、動かないと。
wordpress様を過信していたので、ハイフンの後になんでもつければ、優先順位でwp様が勝手に判断してくれるだろうという、なんて楽天的な発想のオレ。
ということで、調べてみると…
まず、個別記事を表示するsingle.phpでは、カテゴリーを指定するテンプレート階層はありません。カテゴリーならcategory-slug.phpとして、カテゴリーに付随するslug別にテンプレートファイルを用意できますが、シングルではslugを用意することは稀だからでしょう。
なんとなく読んでいたスカイプの会話が終わってから、「え、シングルのスラッグ!?」と気が付き、「そう言われればどうやるんだろう」とやってみたのをメモしておきます。
まず、カテゴリー別に個別記事のデザインを変える場合
- single-{post_type}.php
※3.0以降 - single.php
- index.php
上記を見ると、single-{post_type}.phpということで、{post_type}の部分はポストタイプです。
カテゴリーなどを指定するものではないので、single.phpではハイフンの後にカテゴリーなどを指定できないということになります。
カテゴリーごとに single.php を変更したい場合は、条件分岐を使用して、別のテンプレートファイルを読み込みます。
single-post.phpを作成して分岐
<?php if (in_category(hoge)) { /* カテゴリスラッグ hoge の場合 */ include(TEMPLATEPATH . '/single-hoge.php'); } elseif (in_category(fuga)) { /* カテゴリスラッグ fuga の場合 */ include(TEMPLATEPATH . '/single-fuga.php'); } else { /* 他のカテゴリの投稿 */ include(TEMPLATEPATH . '/single.php'); } ?>
上の例では、single.phpはそのままに、single-post.phpを作成して、hoge, fuga, その他のシングルページ全部と振り分けています。
ではスラッグではどうか
こちらはis_singleを使用して、任意のスラッグを指定して分岐します。
シングルページをスラッグで分岐
<?php if (is_single('foo')) { /* カテゴリスラッグ photo */ include(TEMPLATEPATH . '/single-foo.php'); } elseif (is_single('bar')) { /* カテゴリスラッグ photo */ include(TEMPLATEPATH . '/single-bar.php'); } else { /* 他のカテゴリの投稿 */ include(TEMPLATEPATH . '/single.php'); } ?>
is_singleのパラメーターは、
- 記事ID
- 記事タイトル
- 記事スラッグ
と適用できるので、スラッグを指定した場合は、そのスラッグで条件分岐することができます。
※複数の場合は配列で。
個別のシングルページを分岐することがあまりなかったので、勉強になりました。感謝です!!!