「wp_list_categories()」はカテゴリーの一覧をリンク付きで表示する場合に使う関数です。
よく使うのですが、オプションの「show_count」を使うと、投稿数が「aタグ」の外に表示されてしまいます。
これ結構、扱いが面倒なんですよね。
何とかできないか調べてみましたが、結論は「出来ません」でした。
出来るといえば出来るのですが「wp_list_categories()」関数自体をカスタマイズするしかないようなのです。
ノンプログラマーのボクには、少し敷居が高いと感じてしまいました。
また、どうしてこうするのか、仕組みもわからないままコードをコピペするのは、個人的には気持ち悪いです。
そういう訳で、今回はスルーしました。
そんなの気にしないという人は下記の記事を参考にしてみてください。
「get_terms()」を使って実現
というわけで、「wp_list_categories()」を使うのはあきらめて「get_terms()」という関数を使うことにします。
「get_terms()」はタームの内容を取得するだけで「wp_list_categories()」のように、自動でhtmlまで生成はしてくれません。
自動じゃない代わり、逆に、自由にhtmlを組むことができるというわけです。
取得する条件や戻り値などは「Codex」で詳しく見てもらうとして、ここでは、投稿数が多い順に並べるくらいにしておきました。
<?php
$args = array(
'orderby' => 'count',
'order' => 'DESC'
);
$terms = get_terms('category', $args);
?>
<ul>
<?php foreach($terms as $term):
echo '<li><a href="'.get_term_link( $term ).'">'.$term->name.'<span>('.$term->count.')</span></a></li>';
endforeach;?>
</ul>
これで「aタグ」の中に投稿数を入れることができました。しかも投稿数を「span」で囲んでみたりして。
このように、htmlを自由に組めるので、classなども自分の好きなように設定することもできます。
カテゴリーに特化した「get_categories()」タグに特化した「get_tags()」
この「get_terms()」ですが、カテゴリーやタグに特化した「get_categories()」「get_tags()」もあります。
$terms = get_terms($taxonomy, $args);
$categories = get_categories($args);
$tags = get_tags($args);
「get_categories()」「get_tags()」の場合、タクソノミーの指定を省略できます。
ただ、何度もいっているのですが、カテゴリーもタグもタクソノミーの1つです。
デフォルトで用意されているタクソノミーなのです。
タクソノミーに応じて「get_categories()」「get_tags()」を使い分けるのもいいのですが、「get_terms()」さえ覚えておけば、カテゴリーにもタグにも対応できます。
当然、カスタムタクソノミーの場合は「get_terms()」使うことになります。
「get_the_terms()」との違い
「WordPress カテゴリー・タグの取得まとめ」でも紹介した関数「get_the_terms()」と似ていますが、当然ですが全く違う関数です。
「get_terms()」は指定したタクソノミーのタームを取得できますが、「get_the_terms()」は投稿に紐づいているタームを取得します。
ホント、WordPressは似たような名前の関数が多くて紛らわしいですね。
最後に
実はこのサイトのカテゴリーとタグも「get_terms()」を使って「aタグ」の中に投稿数を入れました。
spanで囲った投稿数はフォントサイズを一回り小さくしてみました。
「wp_list_categories()」があれば、使うことはないと思っていた関数ですが、好きにデザインできるので「get_terms()」を使うことが多いです。