カテゴリーリストを投稿数でソートする

WordPressにはカテゴリーリストを表示するウィジェットが標準で用意されていますが、これを使用せずにカテゴリーリストを表示するようにしました。
リンクタグ内に投稿数を表示したかったため。
ついでに投稿数順にソートして表示するようにしました。

sidebar.php など、カテゴリーリストを表示したい箇所に以下を追加します。
ウィジェットを使用している場合など、そのままでは動かないかもしれません。環境に合わせて修正してください。
カテゴリーが階層になっている場合は、<li>タグの class属性に "depth-1" や "depth-2" などを付与します。リストタグは階層化しませんでした。

<ul>
<?php
   function vo_putcat($depth,$pid,$cats_pid){
      foreach($cats_pid[$pid] as $cat)
         $cats_count[$cat->category_count][] = $cat;
      krsort($cats_count);
      foreach($cats_count as $key => $cats_same){
         foreach($cats_same as $cat){
            $tid = $cat->term_id;
            echo '<li class="depth-' . $depth . '"><a href="'
               . get_category_link($tid)
               . '" title="「' . $cat->name . '」カテゴリーの記事を表示">'
               . $cat->name . ' <span class="post-count">('
               . $cat->category_count . ")</span></a></li>\n";
            if(isset($cats_pid[$tid]))
               vo_putcat($depth+1,$tid,$cats_pid); //注)再帰
         }
      }
   }
   $cats_all = get_categories(array('pad_counts' => true));
   foreach($cats_all as $cat) $cats_pid[$cat->parent][] = $cat;
   vo_putcat(1,0,$cats_pid);
?>
</ul>

どう実現すべきか非常に悩みましたが、カテゴリーのデータを配列にためて処理するようにしました。また、階層構造を再現するために再帰を利用しています。
もっと、簡単な方法がありましたら、ぜひ教えてください(^_^;)

ちなみに、投稿数をリンクタグ内に入れないのであれば、wp_list_categories() でものすごく簡単に投稿数でソートされたカテゴリーリストを表示することができると思います…。


COMMENT

コメントをどうぞ

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)