サポート » 使い方全般 » カテゴリーごとにテンプレートを変える

  • 解決済 get_up_kids76

    (@get_up_kids76)


    こんばんは。

    早速ですが、カテゴリーごとに呼び出すテンプレートを変えたいです。

    いろいろ調べてみたのですが
    数が決まっていって、もちろんカテゴリー名も割り当てられたカテゴリー番号(cat=2など)も
    決まっていれば、問題なくカテゴリーごとにヘッダーやサイドバーなどを変更できたのですが
    現在は数が決まっているが、これから増えていくという場合の対処法が
    全く検討もつかなく困っています。。
    どなたかお力添えをいただけますでしょうか。

    ■親カテゴリー
     ◇小カテゴリー1
     ◇小カテゴリー2
     ◇小カテゴリー3
    ■親カテゴリー2
     ◇小カテゴリー1
     ◇小カテゴリー2

    現在は、こんな感じで数も全て決まっているのですが
    今後、小カテゴリーはどんどん増えていく予定です。

    増えるたびにテンプレートを書き換えるのではなく
    小カテゴリーが増えた時に自動で反映されるような仕組みはございますでしょうか。

    どうかお力添えをよろしくお願いいたします!!

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • $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 )とか
    お好みでオタノシミください。

    トピック投稿者 get_up_kids76

    (@get_up_kids76)

    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');
    }
    ?>

    トピック投稿者 get_up_kids76

    (@get_up_kids76)

    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標準機能でカテゴリーごとにテンプレートを変えることは可能

    子孫カテゴリーの場合は先祖カテゴリーにするようなので、素の機能ではアレかなーと。

    トピック投稿者 get_up_kids76

    (@get_up_kids76)

    kzさま

    御礼遅くなりました。。。すみません。。。
    無事、私の思う通りの展開ができました!!
    (ただ微妙に理解しきれずに発進しているためまた、トラブルかもしれませんが)

    やはり無知というのはいけませんね。。

    ご迷惑をおかけしました。。

    WordPress楽しいのですがPHPとは。。。てな具合で
    ブログ制作しているもので。

    いろいろ試してはみたいので今後とも
    ご教授のほどどうぞよろしくお願いいたします!!
    (極力自力でがんばります。。)

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「カテゴリーごとにテンプレートを変える」には新たに返信することはできません。