サポート » 使い方全般 » カテゴリーごとにヘッダーの画像を変えたい

  • カテゴリーごとにヘッダーの画像を変えたいのですが、別に用意したheader2.phpをインクルードする方法ではなく、「画像だけ」を入れ替える方法を探しています。

    <?php
    $post = $wp_query- >post;
    if ( in_category(‘1’) ) {
    <img src=”/image/ex.jpg”>;
    } elseif ( in_category(‘2’) ) {
    <img src=”/image/ex2.jpg”>;
    } ? >

    みたいなのを試しましたが、ダメでした。(根本的に違ってるかもしれませんが・・)

    複数のテンプレート・ファイルを作成するより、できれば、画像だけチェンジ・・と手軽に済ませたいので、何か良い方法があれば、教えて頂きたいです。

    よろしくお願いします。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • <div class="cat-<?php echo $cat->cat_ID; ?>"></div>

    などのようにしてcssで背景画像指定とかではどうでしょう。
    h2タグやaタグに直接指定してもいいと思いますね。
    もちろんheader.phpへの記述です。is_home()などの分岐もいれませう。
    画像ではありませんが、このような感じで使用しています。

    <div id="header_title">
    <?php if( is_home() ) : // フロントページの場合 ?>
    <h2 class="home"><?php bloginfo('name'); ?></h2>
    <?php elseif( is_month() ) : // 月別ページの場合 ?>
    <h2><a class="archive" href="<?php echo get_settings('home'); ?>/"><?php echo get_the_time('Y年m月の記事'); ?></a></h2>
    <?php else : // それ以外の場合
    $cat = get_the_category();
    $cat = $cat[0];
    ?>
    <h2><a class="cat-<?php echo $cat->cat_ID; ?>" href="<?php echo get_settings('home'); ?>/"><?php echo $cat->cat_name; ?>カテゴリの記事</a></h2>
    <?php endif; ?>
    </div><!-- END div#header_title -->

    shokunさん、お返事ありがとうございます。
    ただ今、苦戦しています。

    ご教示いただいた内容で、理論的には理解できました。

    でも、自分の使っているテーマファイルに上手く組み込めないんです。

    この部分

    <?php else : // それ以外の場合
    $cat = get_the_category();
    $cat = $cat[0];
    ?>

    たとえば、

    カテゴリーID=3,5,7 ・・Header_1.jpg
    カテゴリーID=4,6,8 ・・Header_2.jpg

    と指定する場合、$cat = $cat[0]; の部分の記述はどうなりますか?

    基本的な質問でごめんなさい。

    カテゴリーが多いので、一つ一つ個別に記述するとなると、ものすごい数になってしまうので、どうしたものかと頭を抱えています。

    自分のどこかの記述がおかしいんだと思いますが・・悪戦苦闘中です^_^;

    せっかくですので、一つずつやって見ましょう;)

    <?php
    $cat = get_the_category();
    echo "<pre>";
    print_r($cat);
    echo "</pre>";
    ?>

    こんな感じで記述すると・・・

    Array
    (
    [0] => stdClass Object
    (
    [term_id] => 1
    [name] => キャンパス
    [slug] => campus
    [term_group] => 0
    [term_taxonomy_id] => 1
    [taxonomy] => category
    [description] =>
    [parent] => 0
    [count] => 12
    [object_id] => 79
    [cat_ID] => 1
    [category_count] => 12
    [category_description] =>
    [cat_name] => キャンパス
    [category_nicename] => campus
    [category_parent] => 0
    )

    )

    こんな感じで表示されます。
    つまり、配列$catの中の0番目にいろいろと入っているのが分かりますね!

    $cat = $cat[0];

    はこの0番目だけを取得しているのですね!
    あとは好きなデータをキーを指定して取得してあげればいいのです。
    で、本題ですが、これは現在表示している記事のカテゴリーを取得しているだけですので、分岐はこれを元に行います。
    いろいろな方法がありますが、例えば

    switch($cat->cat_ID) {
      case 3:
      case 5:
      case 7:
        echo "A";
        break;
      case 4:
      case 6:
      case 8:
        echo "B";
        break;
      default:
        echo "C";
    }

    とswitchを使ってみました。

    で、本当に本題です;P
    私が最初に示したのはこんなに複雑なことをやる内容ではなくて、

    <div class="cat-<?php echo $cat->cat_ID; ?>"></div>

    こう記述しておくだけで実際には

    <div class="cat-1"></div>

    などのように変換されて表示されるので、あとはcssで

    .cat-1 {
      background:url("img/header.gif") no-repeat;
    }

    を必要なだけ記述でよろしいのでは?ということです;)

    shokunさん、度々、ありがとうございました。

    ただ、残念ながら、うちのテンプレートファイル(が原因?)では、

    <div class=”cat-<?php echo $cat->cat_ID; ?>”></div>

    これが動作しなかったんです。

    そこで、他のサイトでたまたま見かけたcat_IDの出力の仕方を真似て、
    下記の通りにしたら動きました。
    でも、私には、詳しい理由は分からないです。 is_singleが曲者?

    <?php if(is_single() ) : ?>
    <div class=”cat-<?php $cat = get_the_category(); $cat = $cat[0]; {
    echo “$cat->cat_ID” ;
    } ?>”></div><?php endif; ?>

    でも、shokunさんにサジェストいただいた方法で、理論的には納得できました。
    「その手があったか」という感じで、他にもいろいろ応用できそうです。

    まだまだ勉強しないと分からないことばかりなんですけど、
    本当にありがとうございました。
    また今後の参考にさせて頂きます(^^)

    ただ、残念ながら、うちのテンプレートファイル(が原因?)では、
    <div class=”cat-<?php echo $cat->cat_ID; ?>”></div>
    これが動作しなかったんです。

    is_singleが曲者なのではなくて、$catに値が代入されていないからですね。

    $cat = get_the_category();
    $cat = $cat[0];

    というコードが必要となります。まあつまり、$catという変数の中には最初から中身が入っているわけではなく(wordpressが用意してくれているわけではない)、get_the_categoryで$catの中に入れてあげているのです。
    ですので、$cat->cat_IDを使用したいコードよりも上に上記コードを追加してあげてください。

    <?php if(is_single() ) : ?>
    <div class="cat-<?php $cat = get_the_category(); $cat = $cat[0]; {
    echo "$cat->cat_ID" ;
    } ?>"></div><?php endif; ?>

    このコードでは<?phpから?>までの間に該当のコードがすべて入っていますでしょ?だから前後のif(is_single())は関係ないのですよ。(is_singleは単独記事の場合の条件分岐命令です)

    もしかしてPHPのソースは読めませんでしたか・・・?

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