サポート » 使い方全般 » 紐ついている子カテゴリの投稿総数の取得について

  • 解決済 dddi9

    (@dddi9)


    ある特定のカテゴリに紐つく投稿数のカウントは下記方法で取得できたのですが、

    $chosen_id = 3; // カテゴリID
    $thisCat = get_category($chosen_id);
    $count_num = $thisCat->count;

    それらを統括する親カテゴリから、カテゴリ親子関係で紐ついている子カテゴリに所属する投稿数を取得できないでしょうか。
    ※各投稿からは親カテゴリに直接紐つけ(管理画面でチェックを入れる)をしたくありません。(各子カテゴリにて親カテゴリに紐つけてあるだけの状態です)

    どうぞ宜しくお願いいたします。

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • 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

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • トピック「紐ついている子カテゴリの投稿総数の取得について」には新たに返信することはできません。