特定のカテゴリを持つ記事ページで見栄えを変えたい。単一記事テンプレートをカテゴリ別に切り変える方法

php WordPressのカスタマイズ

WordPressの記事の個別ページは単一記事と呼ばれ、アーカイブやカテゴリ一覧ページとは別のテンプレートが使用されています。この単一記事のテンプレートは、カスタマイズされていない状態では single.php が使われています。
全ての単一記事ページで共通のテンプレートです。これを編集することで、記事ページの見栄えをカスタマイズできます。

カテゴリごとに記事の横のサイドバー内容を変えたい、デザインを変えたいなどはよくあるケースです。single.php 内に分岐処理でゴリゴリと記述していくのもできなくはないですが、内容によってはごちゃごちゃした可読性の低いテンプレートができてしまいます…。

そういう時はテンプレート自体を新たに作り、切り替えてしまいましょう。

今回は単一記事のテンプレートを記事の持つカテゴリ別に切り変える方法を紹介します。

特定カテゴリ用単一記事テンプレートを作成する

例として、お知らせ(スラッグ:news)カテゴリ用の単一記事テンプレを作成します。
single.php を元に、お知らせカテゴリの単一記事ページで見せたい内容で自由に作成します。

/テーマフォルダ/single-news.php

テンプレート名については規則はないので、わかりやすいものであればなんでもOKです。

特定カテゴリ時のみテンプレートを変更させる

切り替え先のテンプレートが出来上がりましたので、今度は既存の single.php を編集します。
テンプレートは出来ましたが、この段階ではこのファイルはまだどこからも使われません。
今回作成したファイルは、WordPressが自動でテンプレート切り替えをしてくれるものではないので、こちらから特定のカテゴリ記事別の切り替えをさせることが必要です。

single.php の一番上と下に以下のコードを記述します。

single.php 最上部:

<?php
$post = $wp_query->post;

// newsカテゴリであれば以下のテンプレートを呼び出す
if ( in_category('news') ):
	include(TEMPLATEPATH. '/single-news.php'); // 作成したnews用の単一記事テンプレート

// newsカテゴリでなければ、このままsingle.phpを使用
else: ?>

single.php 最下部:

<?php endif; ?>

仕組みとしては、単一記事テンプレートとして呼び出された single.php でカテゴリチェックを行い、条件に合う記事であれば新たに作成したテンプレート single-news.php を呼び出す、という流れです。
カテゴリチェックでは in_category() を使っています。$post に記事データが入っていないと使えないのでご注意ください。

これで記事のカテゴリが news であれば single-news.php が表示され、
それ以外はそのまま元の single.php が使われるようになりました。

カテゴリーに対するテンプレートのまとめ

この方法を使えば、カテゴリだけでなくタグでも同様に切り替えることができます。
タイトルや記事ID、スラッグで分岐させて切り替えることもできるのでご活用ください。

php WordPressのカスタマイズ

関連記事