フォーラム

[解決済み] 条件分岐について (5 件の投稿)

  1. roses
    メンバー
    3 years前の投稿 #

    現在運営中のサイトで、親カテゴリーごとに記事(single.php)の表示を変えるために下記の条件分岐を使っています。

    階層構造

    ・親カテゴリーA(ID:1)
      ├子カテゴリーA-1(ID:2)
      │ └孫カテゴリーa-1(ID:4)
      └子カテゴリーA-2(ID:3)
    ・親カテゴリーB(ID:5)
      ├子カテゴリーB-1(ID:6)
      │ └孫カテゴリーb-1(ID:8)
      └子カテゴリーB-2(ID:7)

    条件分岐

    <?php
    //親カテゴリーAの記事
    if (in_category('1') || in_category('2') || in_category('3') || in_category('4')) { ?>
    親カテゴリーAの記事の表示内容
    
    <?php
    //親カテゴリーBの記事
    } elseif (in_category('5') || in_category('6') || in_category('7') || in_category('8')) { ?>
    親カテゴリーBの記事の表示内容
    
    <?php
    //その他の記事
    } else { ?>
    その他の記事の表示内容
    
    <?php } ?>

    でも、これでは子・孫カテゴリーを増やしたり減らしたりする度にin_category()を追記・削除するので面倒なのです。
    親カテゴリーを指定して分岐させる方法はないでしょうか?
    ※親カテゴリーA、Bともに子・孫カテゴリーは増減します。

    何卒、ご教授よろしくお願いいたします。

  2. shokun0803
    メンバー
    3 years前の投稿 #

    子カテゴリー、孫カテゴリーを投稿するときに親カテゴリーにもチェックを入れているのかいないのかによっても処理が変わってくるような気がしますが、もしチェックを入れているのであればin_category('1')のみの指定で下層カテゴリーが全て含まれるようになりませんか。
    そのような運用が難しいのであればソースを考えなくてはですね・・・

  3. roses
    メンバー
    3 years前の投稿 #

    shokun0803様

    早速のご返答ありがとうございます。

    親カテゴリーにもチェックを入れているのかいないのかによっても処理が変わってくるような気がしますが

    現在、親カテゴリーにはチェックを入れていません。

    というのも、Dagon Design Sitemap Generatorでサイトマップを作っているのですが、親・子カテゴリーの両方にチェックを入れるとサイトマップに同じ記事タイトルが2つ表示されるようになってしまいややこしくなってしまうのです(汗)

    そのため現状では、親カテゴリー直下には記事は無く、子・孫カテゴリー直下に記事があります。

  4. jim912
    世話役
    3 years前の投稿 #

    rosesさん、こんにちは。

    Aカテゴリーが、Bカテゴリーの祖先にあたるかどうかを返してくれるcat_is_ancestor_ofという関数が使えそうです。

    <?php
    $post_cats = get_the_category();
    if ( $post_cats[0]->cat_ID == 1 || $post_cats[0]->category_parent == 1 || cat_is_ancestor_of( 1, (int)$post_cats[0]->category_parent ) ) { ?>
    親カテゴリーAの記事の表示内容
    <?php } elseif ( $post_cats[0]->cat_ID == 5 || $post_cats[0]->category_parent == 5 || cat_is_ancestor_of( 5, (int)$post_cats[0]->category_parent ) ) { ?>
    親カテゴリーBの記事の表示内容
    <?php } else { ?>
    その他の記事の表示内容
    <?php } ?>

    留意事項&その他

    • 複数カテゴリーにチェックされている記事でも取得できた最初のカテゴリーで判別されます。
    • もう少し記述を少なくすることもできますが、DBへのアクセス回数を減らすため、あえて冗長に書いています。

    おまけ:拙作PS Auto Sitemapもよろしくです。

  5. roses
    メンバー
    3 years前の投稿 #

    jim912様

    ご回答ありがとうございました。
    早速、ご提示いただいた条件分岐を使わせていただいたところ思い通りの表示ができました。
    ありがとうございました!

    PS Auto Sitemapも試してみます:)

返信

ログイン しなければ投稿できません。

About this Topic