カテゴリごとにテンプレートを切り替える

公開日| 2010年11月8日   更新日| 2012年9月14日   3 個のコメントがあります。

前回、記事ごとにテンプレートを切り替えるプラグイン で紹介したプラグイン 「Custom Post Template」を用いて、 記事ごとのテンプレートの切り替え、ページごとのテンプレートの切り替えを実現しました。(ページごとの切り替えは、デフォルトで動作するんですけど、流れで説明しました。

今回は、カテゴリごとにテンプレートを切り替える方法です。
これは、プラグインを必要としません。

では、早速、簡単に解説してみます。

カテゴリごとのテンプレートを用意する

カテゴリごとにテンプレートを切り替えるためには、カテゴリごとのテンプレートを用意だけです。

あまりにも簡単なので、ちょっとびっくりされたかもしれません。
ただ名前の付け方が違うだけなんですね。

通常は、
category.phpとつけるとことを category-8.phpなどと-8のようにハイフン+カテゴリ番号をつけてテンプレートを作成するだけです。
※または、ハイフン+スラッグ名をつけても可。例)category-samaple3.php

カテゴリIDは、昔のWordpressでは、常に表示されていましたが、現在は、表示されていません。
カテゴリの管理画面で、カテゴリ名にマウスをのせると、リンクアドレスが表示されます。その中にカテゴリ番号が表示されます。


現在は、スラッグ名も使えるので、スラッグ名を使うことが推奨されているんでしょうかね。(想像です。

では、簡単なテスト用テンプレートを作ってみましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>
<head profile="http://gmpg.org/xfn/11">
<meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />
<meta name="distribution" content="global" />
<meta name="robots" content="follow, all" />
 
<title>これは、カテゴリごとのテスト用テンプレートです。</title>
 
<link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="<?php bloginfo('rss2_url'); ?>" />
<link rel="alternate" type="text/xml" title="RSS .92" href="<?php bloginfo('rss_url'); ?>" />
<link rel="alternate" type="application/atom+xml" title="Atom 0.3" href="<?php bloginfo('atom_url'); ?>" />
<link rel="pingback" href="<?php bloginfo('pingback_url'); ?>" />
<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" />
</head>
<body>
<br />
<?php if (have_posts()) : while (have_posts()) : the_post();  ?>
<h1><?php the_title(); ?></h1>
<?php the_content('続きを読む'); ?>
<?php endwhile; endif; ?>
</body>
</html>

例えば、ターゲットのカテゴリIDが8なら、これを、category-8.phpでテーマ(テンプレート)のディレクトリへ保存します。
カテゴリ番号=8のカテゴリリストを表示してみましょう。


こんな感じで表示されます。ここでのサンプル記事が1つなので、リストも1つしかありません。
実際のカテゴリリストは、こちら です。

しかし、これは、あくまでカテゴリリストを表示するためのテンプレートでしかありません。
カテゴリのすべての記事に影響するわけではありません。

つまりは、どんなに独自のテンプレート(テーマ)を持つカテゴリでも、そのカテゴリの記事を表示した場合は、その独自のテンプレート(テーマ)は適用されないわけです。

では、カテゴリの記事に対して、この独自のテンプレート(テーマ)を適用するには、どうしたら良いでしょうか。

カテゴリの全ての記事にテンプレートを適用する

これは、single.php あるいは、index.php に手を加える必要があります。
つまりは、記事を表示するテンプレートファイル(single.phpが存在すれば、そちらが優先されます。)

single.php あるいは、index.php の先頭に以下のコードを追加します。

1
2
3
4
5
6
7
8
9
10
11
12
<?php
	$cat = get_the_category();
	if(count($cat)>0){
		$cat = $cat[0];
		$cat_id = $cat->cat_ID;
		if($cat_id==8){
			include(TEMPLATEPATH."/category-8.php");
			exit;
		}
	}
 
?>

記事を表示する前に、カテゴリIDを取り出して、そのIDが対象となるカテゴリIDの場合は、そのテンプレートファイルを読み出して終了・・・だけです。

※この例では、カテゴリID=8の場合で記述されています。カテゴリIDが異なる場合は、8で記述している箇所を変更してください。

これを用いると、該当するカテゴリの記事は、以下のように表示されます。


こんな感じで表示されます。<!–more–>以降も表示されてますね。
実際の記事は、こちらです。

ざっと、こんな感じです。少し、テンプレートに手を加えることで、簡単に切り替えできるんですね。

前回の記事で紹介した内容も、記事数が少なければ、これと同じようなやり方でも切り替えることができます。

でも、プラグインが汎用的ではありますから、そちらが良いのかもしれません。この辺りは、テーマ(テンプレート)をいじる人の好みかもしれませんね。


コメント

3 件 口コミ・評判があります。 口コミ・評判を投稿する
  1. […] カテゴリごとにテンプレートを切り替える […]

  2. 長谷川
    2014年11月25日, 7:02 PM

    悩んでいた問題が貴サイトのおかげで解決致しました。
    ありがとうございました。

  3. 管理人
    2014年11月25日, 7:11 PM

    長谷川さん
    コメントありがとうございます。管理人です。
    少しでも役に立てて、記事を書いて良かったです。

口コミ・評判を投稿 :

ブラウザの JavaScriptが無効となっている場合、コメントの投稿はできません。
コメントを投稿するには、JavaScriptを有効にしてください

お名前 *

メールアドレス *
(口コミ・評判欄には、表示されませんが入力が必要です。)

サイトアドレス



  • はてなブックマークへ追加する
  • Facebookでシェアする
  • twitter でつぶやく
  • Google Plusでシェアする
  • Pocketでシェアする
ページトップへ