カテゴリーごとにテンプレートを変える
-
こんばんは。
早速ですが、カテゴリーごとに呼び出すテンプレートを変えたいです。
いろいろ調べてみたのですが
数が決まっていって、もちろんカテゴリー名も割り当てられたカテゴリー番号(cat=2など)も
決まっていれば、問題なくカテゴリーごとにヘッダーやサイドバーなどを変更できたのですが
現在は数が決まっているが、これから増えていくという場合の対処法が
全く検討もつかなく困っています。。
どなたかお力添えをいただけますでしょうか。■親カテゴリー
◇小カテゴリー1
◇小カテゴリー2
◇小カテゴリー3
■親カテゴリー2
◇小カテゴリー1
◇小カテゴリー2現在は、こんな感じで数も全て決まっているのですが
今後、小カテゴリーはどんどん増えていく予定です。増えるたびにテンプレートを書き換えるのではなく
小カテゴリーが増えた時に自動で反映されるような仕組みはございますでしょうか。どうかお力添えをよろしくお願いいたします!!
-
$cat = get_category( intval( get_query_var('cat') ) ); while ( $cat->parent > 0 ) $cat = get_category( $cat->parent );
で先祖カテゴリーのオブジェクトが取得できるので
category.php で
include(TEMPLATEPATH . '/category-' . $cat->term_id . '.php' )
とか
get_header( $cat->slug )
とか
get_sidebar( $cat->cat_ID )
とか
お好みでオタノシミください。kzさま
こんばんは。
早速のお返事ありがとうございます!!!!スミマセン。。。私が初心者すぎて。。
どこにお教えいただいたコードを記入すればよいのかお教えくださいませんか?blog / category1 / sub-category1
sub-category2
category2 / sub-category3
sub-category4
sub-category5
category3 / sub-category6
sub-category7
sub-category8という構成になっています。
大元のblogのheader.phpに
<?php
$post = $wp_query->post;
if ( in_category(‘3’) ) {
include(TEMPLATEPATH . ‘/news.php’);
} else {
include(TEMPLATEPATH . ‘/diary.php’);
}
?>
という記述をしてそれぞれのヘッダーを呼び出すようにしているのですが
これでは、新しいカテゴリー(サブカテゴリー)の追加時にいちいち
足していかないいけません。このヘッダー部分にかけば良いのでしょうか。
根本の原理を理解していないため
失礼な質問かとは思いますが何卒お教えくださいませんでしょうか。よろしくお願いします!!
投稿の1記事を表示するテンプレートをカテゴリーごとに変更する場合:
single.php に以下を記述すれば OK です。<?php $post = $wp_query->post; $category = get_the_category( $post->ID ); $cat = $category[0]; while ( $cat->parent > 0 ) $cat = get_category( $cat->parent ); if ( '3' == $cat->term_id ) { include(TEMPLATEPATH . '/news.php'); } else { include(TEMPLATEPATH . '/diary.php'); } ?>
kzさま
こんにちは。
お返事がおくなり申し訳ありません!!!!上記ご教授いただきました内容にて設定し
ずっとトライしているのですが、カテゴリーが2つではなく
4つ以上の時にうまく移行できません。。<?php
$post = $wp_query->post;
$category = get_the_category( $post->ID );
$cat = $category[0];
while ( $cat->parent > 0 )
$cat = get_category( $cat->parent );if ( ‘3’ == $cat->term_id ) {
include(TEMPLATEPATH . ‘/category3.php’);
} else {
include(TEMPLATEPATH . ‘/category_no.php’);
}
?>
<?php
$post = $wp_query->post;
$category = get_the_category( $post->ID );
$cat = $category[0];
while ( $cat->parent > 0 )
$cat = get_category( $cat->parent );if ( ‘4’ == $cat->term_id ) {
include(TEMPLATEPATH . ‘/category4.php’);
} else {
include(TEMPLATEPATH . ‘/category_no.php’);
}
?>
<?php
$post = $wp_query->post;
$category = get_the_category( $post->ID );
$cat = $category[0];
while ( $cat->parent > 0 )
$cat = get_category( $cat->parent );if ( ‘5’ == $cat->term_id ) {
include(TEMPLATEPATH . ‘/category5.php’);
} else {
include(TEMPLATEPATH . ‘/category_no.php’);
}
?>
<?php
$post = $wp_query->post;
$category = get_the_category( $post->ID );
$cat = $category[0];
while ( $cat->parent > 0 )
$cat = get_category( $cat->parent );if ( ‘6’ == $cat->term_id ) {
include(TEMPLATEPATH . ‘/category6.php’);
} else {
include(TEMPLATEPATH . ‘/category_no.php’);
}
?>初心者すぎて本当に申し訳ありません。。。
かなり焦ってしまっていてどうしたらよいのか。。「3」というカテゴリーの時はcategory3.php、
「4」というカテゴリーの時はcategory4.php、
「5」というカテゴリーの時はcategory5.php
「6」というカテゴリーの時はcategory6.phpというファイルを呼び出したいときは
上記記述で問題ないのでしょうか。。
どういったコードの書き方が正しいのでしょうか。。何度も何度も本当に申し訳ありませんが、ご教授いただければ大変幸いです。
どうかよろしくお願いいたします。横から失礼します。
WordPress標準機能でカテゴリーごとにテンプレートを変えることは可能ですが、
この方法では問題があるということでしょうか?if ( '3' == $cat->term_id ) { include(TEMPLATEPATH . '/news.php'); } else { include(TEMPLATEPATH . '/diary.php'); }
は、日本語で
・カテゴリー ID が3だったら news.php
そうじゃないなら diary.phpですね?ちゅーことは
「3」というカテゴリーの時はcategory3.php、 「4」というカテゴリーの時はcategory4.php、 「5」というカテゴリーの時はcategory5.php 「6」というカテゴリーの時はcategory6.php それ以外ならcategory_no.php
をそのままコードにすれば OK。
if ( '3' == $cat->term_id ) { include(TEMPLATEPATH . '/category3.php'); } else if ( '4' == $cat->term_id ) { include(TEMPLATEPATH . '/category4.php'); } else if ( '5' == $cat->term_id ) { include(TEMPLATEPATH . '/category5.php'); } else if ( '6' == $cat->term_id ) { include(TEMPLATEPATH . '/category6.php'); } else { include(TEMPLATEPATH . '/category_no.php'); }
PHP にちょっと慣れて if else がうざくなってきたら
$cat_temps = array( '3' => 'category3', '4' => 'category4', '5' => 'category5', '6' => 'category6', ); if( isset( $cat_temps[$cat->term_id] ) ) include(TEMPLATEPATH . '/' . $cat_temps[$cat->term_id] . '.php'); else include(TEMPLATEPATH . '/category_no.php');
とかで楽しんでください。
WordPress標準機能でカテゴリーごとにテンプレートを変えることは可能
子孫カテゴリーの場合は先祖カテゴリーにするようなので、素の機能ではアレかなーと。
kzさま
御礼遅くなりました。。。すみません。。。
無事、私の思う通りの展開ができました!!
(ただ微妙に理解しきれずに発進しているためまた、トラブルかもしれませんが)やはり無知というのはいけませんね。。
ご迷惑をおかけしました。。
WordPress楽しいのですがPHPとは。。。てな具合で
ブログ制作しているもので。いろいろ試してはみたいので今後とも
ご教授のほどどうぞよろしくお願いいたします!!
(極力自力でがんばります。。)
- トピック「カテゴリーごとにテンプレートを変える」には新たに返信することはできません。