WordPressの個別ページをカテゴリーごとにデザインを変えるsingle.phpの設定方法

どうも、ホワイトです。

WordPressで個別投稿ページをカテゴリーごとにデザイン変更することがよくあります。

同じ投稿形式でも、newsカテゴリーに属する個別ページと、blogカテゴリーに属する個別ページでデザインを変更したいなんてことが出てくると思います。

タグの出し分けなら条件分岐のifを使ったりしてできることもあるだろうけど、デザインを変更するとなるとカテゴリーごとのsingle.phpがあった方が便利。

その設定方法です。

カテゴリーごとに分岐するためのsingle.phpの記述

カテゴリーごとの記事一覧ページを作る場合はcategory-カテゴリーのスラッグ.phpというファイルをそれぞれ作ってあげれば記事一覧は表示されるのですが、個別ページは単にsingle-カテゴリーのスラッグ.phpというファイルを作っても、記事一覧のように勝手に分岐されて表示はされません。

カテゴリースラッグごとのsingle-〇〇〇.phpを作る前に、大元となるsingle.phpにカテゴリーを分岐するための記述をする必要があります。

最初の頃はここで引っかかって何かエラー出ちゃってるのかな?と迷うこともありました。

例として”news”と”blog”と”report”という三つのカテゴリーとそれ以外を分岐するためには、single.phpに以下のように記述します。

<?php $post = $wp_query->post;
if ( in_category('newsのカテゴリーID') ) {
include(TEMPLATEPATH.'/single-news.php');
} elseif ( in_category('blogのカテゴリーID') ) {
include(TEMPLATEPATH.'/single-blog.php');
} elseif ( in_category('reportのカテゴリーID') ) {
include(TEMPLATEPATH.'/single-report.php');
} else ( in_category('etcのカテゴリーID') ) {
include(TEMPLATEPATH.'/single-etc.php');
}
?>

single.phpへの記述はこれだけ。

newsカテゴリーの場合はsingle-news.php、blogカテゴリーの場合はsingle-blog.php、reportカテゴリーの場合はsingle-report.php、それ以外はsingle-etc.phpが読み込まれます。

カテゴリーIDの部分はスラッグを指定しても大丈夫です。

スラッグで指定する場合は以下のようになります。

<?php $post = $wp_query->post;
if ( in_category('news') ) {
include(TEMPLATEPATH.'/single-news.php');
} elseif ( in_category('blog') ) {
include(TEMPLATEPATH.'/single-blog.php');
} elseif ( in_category('report') ) {
include(TEMPLATEPATH.'/single-report.php');
} else ( in_category('etc') ) {
include(TEMPLATEPATH.'/single-etc.php');
}
?>

あとはここに記述した、カテゴリーごとのsingle.phpファイルを作成して、それぞれにデザインを分けたコーディングを行っていけば完了です。

ここでいうと、single-news.php、single-blog.php、single-report.phpというファイルを作成すれば大丈夫です。

意外と使う機会があるかと思うので、覚えておくと便利です。