ブログを運営していると「○○カテゴリーの記事と□□カテゴリーの記事ではレイアウトを変えたい」ということがあります。
そんなときのために、single.phpのテンプレートファイルを複製して、カテゴリーごとに使い分ける方法をご紹介します。
カテゴリーによってテンプレートファイルを使い分ける
ブログでの記事ページはsingle.phpというテンプレートファイルを使って表示させています。
single.phpの中でカテゴリーごとに条件分岐することも可能なので、部分的な変更点はsingle.php内で条件分岐の構文を書いた方が、編集も管理も楽だと思います。
ただ、大掛かりな変更点があるというか、全然違った見せ方をしたいという場合にはテンプレートファイル自体を分けてしまった方が楽だと感じることも多いです。
というわけで、カテゴリーによってテンプレートファイル自体を使い分ける方法が下記の通りです。
single.phpで適応させるテンプレートファイルを分岐させる
まずsingle.phpを複製しましょう。この複製したファイルは後ほど使用します。
次に、下記のコードをsingle.php(オリジナルの方)にペーストします。
<?php get_header(); ?> <?php $post = $wp_query->post; if ( in_category('music') ) { include(TEMPLATEPATH.'/single/music.php'); elseif ( in_category( array('photo','movie') ) ) { include(TEMPLATEPATH.'/single/works.php'); } else { include(TEMPLATEPATH.'/single/blog.php'); }; ?> <?php get_footer(); ?>
get_header
やget_footer
は入ってると思いますのでそのまま使いまわしてください。
in_category('music')
やin_category( array('photo','movie')
というのは仮に入れたカテゴリーです。music・photo・movieとなっているところにカテゴリーのスラッグを入れましょう。カテゴリーが複数ある場合はarrayなんちゃらと書いて、カテゴリーが1つだけならarrayの記述は必要ありません。
それらの下の行にあるinclude(TEMPLATEPATH.'/single/music.php')
というところがテンプレートファイルへのパスで、テンプレートフォルダ内にsingleというフォルダを作り、その中に該当するファイルを入れるという意味になります。フォルダに格納しなくてもいいですし、フォルダに格納する場合もフォルダ名がsingleである必要はありません。
それぞれのテンプレートファイルを作成
先ほどのコードではファイルまでのパスに「single」というフォルダを作ってその中にファイルを入れるような仕組みにしてましたので、テーマファイル内に「single」フォルダを作りましょう。
先ほど複製した「元のsingle.phpのファイル」に、任意のファイル名を付けてsingleフォルダに入れたら完成です。先ほどのコードの中に「music.php」「works.php」「blog.php」と書いたので、この3種のファイル名でファイルを作成し、あとはそれぞれのファイルの中身をいじって行けばおっけー。
最後に
single.phpのファイルの中で条件分岐しまくって読みにくい場合に、回避策としてお使いください。
ブログやウェブサイトによってはかなり活用できる技だと思います。