スポンサーリンク

WordPressで、あるカテゴリを親に含む現在の記事に対し、その親以下のカテゴリ一覧を表示する

ちょっと自分でも何言ってるのかわからない。

以下のような状態で、(article)の記事で、

categoryB
     CAT_B
         cat_b1
         cat_b2
     CAT_BB
         cat_bb1
         cat_bb2

という一覧を出したい。rootまで遡らず、categoryB以下のカテゴリ一覧だけを取得したいわけである。

 

root
   categoryA
      CAT_A
         cat_a1
         cat_a2
      CAT_AA
        cat_aa1
        cat_aa2
   categoryB
      CAT_B
         cat_b1
         cat_b2
      CAT_BB
         cat_bb1
         cat_bb2    (article)
   categoryC
      CAT_C
         cat_c1
         cat_c2
       CAT_CC
         cat_cc1
         cat_cc2

 

原理は

①まず注目カテゴリとして、現在のページのカテゴリを取得       get_queried_object()
②そのカテゴリの親カテゴリを取得        $catobj->parent
③そのカテゴリが上記でいうところのcategoryBなら、wp_list_categoriesで一覧表示
④そうでないなら、注目カテゴリを②に更新して、②に戻る       get_category

 

  <?php 
    $catobj = get_queried_object(); /*現在のカテゴリIDを取得*/
    /*星の部屋カテゴリと、その下のカテゴリまでを取得*/
    while(true){
      $parentid = $catobj->parent; //注目中のカテゴリの親カテゴリを取得
      if($parentid == 0 || $parentid == 121) //それが「ほしいカテゴリ階層のトップ」ならループを抜ける。(0判定は無限ループ対策)
        break;
      $catobj = get_category($parentid); //親カテゴリ取得。ない場合は0 //parentidに「ほしいカテゴリ階層のトップ」が入っていないなら、それを次の注目カテゴリに設定
    }
    if( $parentid != 0 ){ //0の時は欲しいカテゴリ階層ではないということ(何かが間違っている)ので何もしない
        echo '<ul class="childofcategory">';
  	    wp_list_categories('child_of='.$catobj->term_id.'&depth=0&hide_empty=0&title_li=');//リストはこの関数で$catobj->term_idを指定して取得 
        echo '</ul>';
    }
  ?>

 

私はカテゴリを階層にすると絶対にPHPが面倒になると確信を持っていたので避けているのだが、そんなこととは全く関係ない☆は普通に階層分けしているので結局やる羽目になった。まあこっちの技術力がないからあれをしないでというのは何なので別にいいのだが。。。

 

 

1 件のコメント

  • より:

    メンドウをかけてすみませんです。
    何か作るとハマるカテゴリーないし、
    その他ばかり増えるのはどうかと思うし、、、、

    紙本の注文で、一ページに無理な量を「見やすくきれいに入れてほしい」なんて無茶な注文に応えなくちゃならない苦労はしているつもりだけど、
    私☆もかなり無茶言ってるのかな
    ~~ゴメン~~
    ついでに今後もよろしく

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: