フォーラム

カテゴリーのIDから投稿記事数を返す方法 (2 件の投稿)

  1. worevl
    メンバー
    2 years前の投稿 #

    親カテゴリーと子カテゴリーを表示させる方法で、
    wp_list_cats()」 を使えば手っ取り早いんですけれど・・・。

    wp_list_cats()」 だと、

    <li></li>で囲われる
    記事投稿のない記事までにリンクが貼られてしまう

    などの理由から、自分でPHPで構築しようとしています。

    まず、実現したいことは、「親カテゴリーと子カテゴリーの取得」 です。

    その際の条件として、下記のことを考えています。

      1. 記事が投稿されていないカテゴリーにはリンクを貼らない

      2. 記事が投稿されていないカテゴリーには投稿数を表示せず、
         記事が投稿されているカテゴリーには投稿数を表示する

      例1. カテゴリーに記事が投稿されている場合

        <a href="">未分類</a> [10]

      例2. カテゴリーに記事が投稿されていない場合

        未分類

    [ ] の中身が、そのカテゴリーに含まれる記事投稿数です。

    自分なりに、アルゴリズムは次のように考えました。

      1. カテゴリーの一覧から親を探し、表示する
        (記事が投稿されていれば、リンクを貼り、記事投稿数を表示する)

      2. 親を見つけたら、その親に含まれる子カテゴリーの一覧を取得し、表示する
        (記事が投稿されていれば、リンクを貼り、記事投稿数を表示する)

      3. 1~2 を foreach 等で繰り返す

    このアルゴリズムで躓いているのは、
    カテゴリーに投稿されている記事数を取得する点」 です。

    今自分が考えているアルゴリズムでは、
    カテゴリーに属する記事数の有無を判定してカテゴリーリンクを生成したり、
    または記事数を表示するものなので・・・。

    下記のように書けば、親カテゴリーと子カテゴリーの判別が出来ると思いました。

    <?php foreach( get_categories('hide_empty=0') as $cat_list ) :
    
    if( get_category_children( $cat_list->cat_ID, '/', '' ) != '' ) {
    
    } else {
    
    }
    
    endforeach; ?>

    get_category_children()」 は、返り値として、
    子カテゴリーのIDを羅列で返しているみたいなので、

    PHPの 「split()」 と 「array_shift()」 で下記のようにすれば、
    各々の子カテゴリーを配列に格納できました。

    $cat_children = split( '/', get_category_children( $cat_list->cat_ID, '/', '' ) );
    array_shift( $cat_children );

    現在躓いている 「投稿されている記事数を取得する点」 ですが、
    今、子カテゴリーを配列で取得した際に、
    各々の子カテゴリーに投稿されている記事数の情報はないので、

    アルゴリズムとして、
    カテゴリーIDを与えてあげれば、そのカテゴリーに属する記事数を返してくれる
    という関数、あるいはPHPでの解決法を探しています。

  2. kurosquare
    メンバー
    2 years前の投稿 #

    カテゴリーIDを与えてあげれば、そのカテゴリーに属する記事数を返してくれる

    get_category($id)->category_count;

返信

ログイン しなければ投稿できません。

About this Topic