ちょっと自分でも何言ってるのかわからない。
以下のような状態で、(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が面倒になると確信を持っていたので避けているのだが、そんなこととは全く関係ない☆は普通に階層分けしているので結局やる羽目になった。まあこっちの技術力がないからあれをしないでというのは何なので別にいいのだが。。。