get_categories()
でchild_ofパラメータに親カテゴリを指定すれば子カテゴリが取得できると思います。用例の項が参考になりそうです。
https://wpdocs.osdn.jp/関数リファレンス/get_categories
get_categories() の pad_counts パラメータが役に立つかもしれませんね。
ikaring様、gblsm様
ご教示くださり有難うございます。
いただきましたパラメーター名をヒントに再度検索してみまして、おかげ様で同様のトッピックスに辿り着くことができました。
https://ja.forums.wordpress.org/topic/4084?replies=5
記載されていた下記でとりあえずしのげそうです。
$cat = get_category_by_slug('tokyobanana');
$Ar_categories = get_categories('child_of=' . $cat->cat_ID);
foreach($Ar_categories as $category) {
$post_count = $post_count + $category->count;
}
echo $post_count;
ただ、上記URLにもありますように、複数のカテゴリに紐ついている投稿が
2重カウントされてしまうのが私も気になりました。
もしこれを解決するヒントがございましたら引き続き宜しくお願いいたします。
この度は誠に有難うございました。
ちょっと思ったんですが、gblsmさんの書かれてるpad_countsを使って、child_ofをやめてincludeを使ったらどうなりますか?下記のような感じです。
$cat = get_category_by_slug('tokyobanana');
$args = array(
'include' => $cat->cat_ID,
'pad_counts' => true
);
$Ar_categories = get_categories( $args );
echo $Ar_categories[0]->count;
ikaring様
ご提案、有難うございます。
いただきましたコードを試してみましたが、0件となり、子カテゴリの投稿数の取得ができていないようでした。
(試しに投稿を親カテゴリにも直接紐つけると、その投稿数のみがカウントされました)
そうですか。おそらくincludeに子カテゴリーのidも追加したらカウントされそうな気がしますが、どうでしょうね。
その上でwp_list_filterとかで親カテゴリーの情報に絞ってカウント数を取り出すとかでできないかなと。
こんにちは
$cat = get_category_by_slug( 'aciform' );
$Ar_categories = get_categories( 'child_of=' . $cat->cat_ID );
foreach ( $Ar_categories as $category ) {
$parents = get_ancestors( $category->cat_ID, 'category' );
if ( $cat->cat_ID == $parents[ 0 ] ) {
$post_count = $post_count + $category->count;
}
}
で、どうでしょう。勘違いしていたらごめんなさい
ikaring様
有難うございます。phpの知識に乏しくて分からないのですが、
方法が他に無ければ、後で参考にさせていただきまたいとおもいます。
nobita様
有難うございます。
下記の部分でdumpしてみたのですが、
if ( $cat->cat_ID == $parents[0]) {
$post_count = $post_count + $cat->count;
var_dump($post_count);
}
int(0) int(0) int(0) int(0)という結果となってしまいました。
※現在の投稿の登録状況は下記の状態です。(Aには投稿を直接紐つけてません)
親カテゴリA – 子カテゴリa(1)
– 子カテゴリb(1)
– 子カテゴリc(1)
– 子カテゴリd(1)
私がphpの知識に乏しく、理解できていないようでしたら申し訳ございません。。
検証してみました。
includeに親と子のカテゴリーIDを全部入れることで親カテゴリーの投稿数に子カテゴリーの投稿数が加算されました。(子カテゴリーの投稿は親カテゴリーにチェックを入れていません)
複数の子カテゴリーにチェックを入れても重複はない様子です。
//親カテゴリーIDと子孫カテゴリーIDの取得については別途考えていただくとして、親が39、子が58として見てください
$args = array(
'include' => '39,58',//親と子のカテゴリーIDの全部をincludeして、pad_countsで親に子カテゴリーの投稿数も加算されるようにします
'pad_counts' => true
);
$Ar_categories = get_categories( $args );
//親カテゴリーの配列要素のみにフィルター
$parent = wp_list_filter( $Ar_categories, array( 'term_id' => 39) );
//親カテゴリーの配列要素からオブジェクトを取得
$parent = reset( $parent );
echo "Posts count : " . $parent->count;
ikaring様
確認できました!
大変お手数おかけ致しました。
有難うございます!
下記、ikaring様の投稿で解決済みとさせていただきます。
https://ja.forums.wordpress.org/topic/158827?replies=10#post-227861