質問: WordPressに関する質問です。 WordPressも初心者で、teratailさんも初利用です。 マナー違反等あればご指摘ください。 お手柔らかにお願いします(>_<) ### 発生している問題 カテゴリの階層ごとの投稿記事数を取得したいのです。 各カテゴリの記事数ではないです。カテゴリの総数でもないです。 階層を縦断した形のカテゴリ数が欲しいのです。 現在、カテゴリをーを > > 種類(第1階層カテゴリ) ― 品目(第2階層カテゴリ) ― 品種(各投稿) > > > としています。 例として > > ・野菜 > > ->キャベツ > > ->ピーマン > > ・くだもの > > ->りんご > > ->みかん > > ->いちご > > > このような形です。 このカテゴリの中に、各投稿が複数ある状態です。 たとえば「りんご」カテゴリの中には『ふじ』『紅玉』『むつ』の記事があるみたいに。 この時、品目(第2階層カテゴリ)の総数を知りたい場合は、どのようにすればよろしいでしょうか? この例の場合ですと、答えは5となります。(キャベツ,ピーマン,りんご,みかん,いちご) 全体カテゴリ総数 - 第一階層カテゴリ数 かなぁと思ったのですが、 第一階層カテゴリ数が取れるなら第二階層カテゴリ数も取れますよね・・・。 どちらにしても第〇階層カテゴリ数、というものが取得できないのですが。 あいまいな質問で申し訳ありませんが、よろしくお願いいたします。
回答: > > 第一階層カテゴリ数が取れるなら第二階層カテゴリ数も取れますよね・・・。 > > > 第一階層は `parent` が `0` なので取れる、という事情です。なので、第二階層のみという条件で数を数えるのであれば、第一階層を取得してそれを親とするカテゴリを取得して回るという実装になると思います。 ``` // 未テスト $first_cats = get_categories( array( 'hide_empty' => true // true/false , 'parent' => 0 // 第一階層取得 , 'fields' => 'ids' // idのみ取得 ) ); // count( $first_cats ); // 第一階層取得 $second_cats = array(); foreach( $first_cats as $f_cat ) { $second_cats = array_merge( $second_cats, get_categories( array( 'hide_empty' => true // true/false , 'parent' => $f_cat->term_id , 'fields' => 'ids' // idのみ取得 ) ) ); } // count( $second_cats ); // 第二階層取得 ``` 【get_categories:WordPress私的マニュアル】 【get_categories() | Function | WordPress Developer Resources】 【get_terms() | Function | WordPress Developer Resources】