カテゴリごとにテンプレートを切り替える
こんにちわ。たかちんです。
さて、今回は、前回の記事で紹介したプラグイン
「Custom Post Template」を用いて、
記事ごとのテンプレートの切り替え、ページごとのテンプレートの切り替えを実現しました。(ページごとの切り替えは、デフォルトで動作するんですけど、流れで説明しました。 )
今回は、カテゴリごとにテンプレートを切り替える方法です。
これは、プラグインを必要としません。
では、早速、簡単に解説してみます。
カテゴリごとのテンプレートを用意する
カテゴリごとにテンプレートを切り替えるためには、カテゴリごとのテンプレートを用意だけです。
あまりにも簡単なので、ちょっとびっくりされたかもしれません。
ただ名前の付け方が違うだけなんですね。
通常は、
category.phpとつけるとことを
category-8.phpなどと-8のようにハイフン+カテゴリ番号をつけてテンプレートを作成するだけです。
※または、ハイフン+スラッグ名をつけても可。例)category-samaple3.php
カテゴリの管理画面で、カテゴリ名にマウスをのせると、リンクアドレスが表示されます。その中にカテゴリ番号が表示されます。
現在は、スラッグ名も使えるので、スラッグ名を使うことが推奨されているんでしょうかね。(想像です。 )
では、簡単なテスト用テンプレートを作ってみましょう。
1 2 3 4 5 | これは、テンプレートごとのテスト用テンプレートです。<br /> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <h1><?php the_title(); ?></h1> <?php the_content('続きを読む'); ?> <?php endwhile; endif; ?> |
例えば、ターゲットのカテゴリ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–>以降も表示されてますね。
実際の記事は、こちらです。
前回の記事で紹介した内容も、記事数が少なければ、これと同じようなやり方でも切り替えることができます。
でも、プラグインが汎用的ではありますから、そちらが良いのかもしれません。この辺りは、テーマ(テンプレート)をいじる人の好みかもしれませんね。
この記事を読んだ人は、こんな記事も読んでいます。:
Trackback URL
このコメントは管理人から承認された後、表示されます。
コメント
One Response to “カテゴリごとにテンプレートを切り替える”
コメントをどうぞ
2010年11月30日 @ 04:26:53
[...] カテゴリごとにテンプレートを切り替える [...]