個別投稿のデザインをカテゴリによって切り替える

WordPressの投稿ページのデザインやコンテンツの表示・非表示を特定のカテゴリ、またはカテゴリ毎などで変えたい時はどうしたらよいのだろう?

初期にある投稿タイプ内に投稿されている記事、その中の特定カテゴリのみデザインを切り替える方法について。

テンプレートの切り替え

WordPressでカテゴリによる表示の切り替え

初期にある投稿タイプ内に投稿されている記事は、まず「single.php」を最初に読みにいくことになっているようです。

ということは、「single.php」に条件分岐を書いておけばよさそうですよね。

WordPress Codexで確認したところ、ありました!

カテゴリの条件分岐タグ:WordPress Codex 日本語版

(通常 single.php テンプレートで扱う)個別投稿のリクエストでは、ループが始まる前でもカテゴリーをテストすることができます。

——- これを用いてテンプレートを切り替えることができます。

特定のカテゴリでデザインや表示されるものを切り替える

カテゴリ毎にテンプレートを分けたり、特定のカテゴリだけ表示・非表示を切り替えたりしたいと思うのは、以下のようなときです。

  • 違うテンプレートを読みに行ってほしいとき
  • 特定のカテゴリのときだけ表示させたいコンテンツがあるとき

別のテンプレートを読みに行ってほしいとき

ジャンルが違ったり、別の担当者が投稿している特設コーナーなど、デザイン(雰囲気など)を変えたい時にはこの方法で切り替えられます。

もう1つ、カスタム投稿タイプを作るという方法もあるのですが、既に投稿してある段階で、後から変えたくなるときもありますので、そんな時のために。

1. 新しく〇〇.phpを作る

single.phpのファイルをコピーして、〇〇.phpを作ります。

今回はデザインを2つに分けたいので2つ用意しました。(mainとかsubとか好きな名前で可。)

2. 「single.php」 に記述

最初に記述されているものは全て消して、下記(例)を記述します。


         <?php
if ( in_category( array( 1,5 ))) {
  get_template_part( 'sub' );
} else {
  get_template_part( 'main' );
}
?>

※「get_template_part()」は、任意のテンプレートを読み込むインクルードタグ

あるカテゴリのときだけ表示させたい部分的なコンテンツがあるとき

特定のカテゴリを見ている人に興味がありそうな内容を表示させることができます。

デザインというよりマーケティングのためによく使われるのではないかと思います。

ちなみに、一部分変えたい時には、使用するテンプレートの表示させたい箇所(single.phpなど)にカテゴリの条件分岐と中身コンテンツを書くことができます。

in_categoryは、ループ内で使用できるので、書き方は上記と同じです。
必要に応じて条件を追加して、カテゴリによって表示させたいコンテンツを切り替えることができます。


<?php
if ( in_category( array( 1,5 ))) {
  // ここに表示させたい コンテンツ1
} elseif ( in_category( array( '10', '11' ) )) {
// コンテンツ2
} else {
  // コンテンツ3
}
?>

※elseif以降は省略可。パラメータはカテゴリidまたはslugが使えます。

部分的な表示・非表示をしたい時はテンプレートの表示させたい箇所(single.phpなど)にカテゴリの条件分岐と中身のコンテンツ(htmlやテキスト)を直接書いておくことで、該当のカテゴリの記事が表示されたときに、ここに書いた内容が表示されるようになります。

上記の例は、カテゴリidが1と5は「コンテンツ1」、10と11の時は「コンテンツ2」の内容、その他は「コンテンツ3」を表示するというものです。