サポート » 使い方全般 » アーカイブページの条件分岐

  • 解決済 grass

    (@grass)


    現在構築中のサイトで特定の親カテゴリーを持つ子カテゴリーページ(category.php)の表示を変更する為、以下の分岐を使っています。

    階層構造

    ・親カテゴリーA(ID:1)
      ├子カテゴリーA-1(ID:2)
      └子カテゴリーA-2(ID:3)
    ・親カテゴリーB(ID:4)
      ├子カテゴリーB-1(ID:5)
      └子カテゴリーB-2(ID:6)

    条件分岐

    <?php
    //親カテゴリーAに属する子カテゴリーのアーカイブ
    if (is_category(2) || is_category(3)) { ?>
    親カテゴリーAに属するカテゴリーのアーカイブ内容
    
    <?php
    //親カテゴリーBに属する子カテゴリーのアーカイブ
    } elseif (is_category('5') || is_category('6')) { ?>
    親カテゴリーBに属するカテゴリーのアーカイブ内容
    
    <?php
    //その他の記事
    } else { ?>
    その他のカテゴリーのアーカイブ内容
    
    <?php } ?>

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

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

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • is_category は親を指定すれば良いはずですが、試してみましたか?
    in_category は直接指定ですけど。

    kvexさま
    レスありがとうございます。

    下記のようにis_categoryで親を指定してみましたが、
    子カテゴリーのアーカイブページでは思ったような動きをしてくれないようです。

    <?php
    if (is_category(1)) { ?>
    親カテゴリーAに属するカテゴリーのアーカイブ内容
    
    <?php
    } elseif (is_category(4)) { ?>
    親カテゴリーBに属するカテゴリーのアーカイブ内容
    
    <?php
    } else { ?>
    その他のカテゴリーのアーカイブ内容
    
    <?php } ?>

    PHP初心者のためイマイチ分っておりませんが、よろしくお願いいたします。

    ダメでしたか?
    私は、こういう使い方してるんですけどねぇ。

    思ったようにならない、というのは、具体的にどうなったか提示してもらえますか?

    is_category()って、スラッグとか配列とかでも渡せるので:

    is_category( array( 9, 'blue-cheese', 'Stinky Cheeses' ) );
    

    ここいらを上手く使って、スラッグ合成+変数渡しってのはどうですかね?親+子という適当なルールを作って…

    $my_cat_q = $parent_slug . '-' . $child_slug;
    if( is_category( $my_cat_q ) ) { .... }
    

    こんな感じに合成してから渡す、みたいな…。

    ハードコードしちゃうと、後でカテゴリが増えた時に困るだろうから、親のslugはID番号、子のslugは親+子のID、例えば9-10とか5-12とかにすれば、ID番号を基準にslugが合成出来るから、後はそれをis_categoryに渡せばえーんじゃないかな、と思いますがいかがでしょう?

    kvexさま
    具体的に言うと、子カテゴリーA-1、A-2、B-1、B-2ページの内容が
    「その他のカテゴリーのアーカイブ内容」になってしまうようです。

    V.J.Catkickさま
    レスありがとうございます。

    親タイトル:food、親スラッグ:food
    子タイトル:orange、子スラッグ:food-orange

    上記のような設定をするということでしょうか?
    これだとテンプレート内でタイトルを使用しているので、
    タイトルを変更するという別の問題が生じてしまう気がします。

    そう思って、IDで割り振る方に書き直しました(汗)。

    カテゴリを作る時のSlugにIDを入れて置けば合成出来そうです。

    V.J.Catkickさま

    アドバイスありがとうございます。
    下記のようなコードで実現することができました。

    <?php
    $cat_now = get_the_category();
    $parent_id = $cat_now[0]->category_parent;
    $child_id = $cat_now[0]->cat_ID;
    $my_cat_q = $parent_id . '-' . $child_id;
    if (is_category($my_cat_q)) { ?>
    スラッグが親ID+子IDのカテゴリーのアーカイブ内容
    
    <?php
    } else { ?>
    その他のカテゴリーのアーカイブ内容
    
    <?php } ?>

    もう少し工夫が必要ですが、少しづつ勉強していこうと思います。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「アーカイブページの条件分岐」には新たに返信することはできません。