WordPress:カテゴリに記事数を表示させる

今回もクライアントからの希望でWordPressのカテゴリーに記事数を表示させたいという要望からの記事である。

カテゴリってどうやって呼び出すの?

カテゴリの呼び出しには

wp_list_categories()

という関数が使われている。
そして、その中に記事数の表示をするかしないかの設定が組み込まれている。

おっと、その前に。ウィジェットの設定の部分で投稿数を表示とあればそれにチェックを入れるだけで良いので、確認してみよう。そしてもし投稿数が出たとしても表示が変だったり記事数までリンクにしたい場合は後述の記事数をリンクに含めるを参考にして欲しい。

さてwp_list_categories()がどこにあるかというと、

wp-includes/category-template.php

のファイルの中だ。

おおよそ以下のように書かれているのではないだろうか。

<?php $args = array(
    'show_option_all'    => '',
    'orderby'            => 'name',
    'order'              => 'ASC',
    'style'              => 'list',
    'show_count'         => 0,
    'hide_empty'         => 1,
    'use_desc_for_title' => 1,
    'child_of'           => 0,
    'feed'               => '',
    'feed_type'          => '',
    'feed_image'         => '',
    'exclude'            => '',
    'exclude_tree'       => '',
    'include'            => '',
    'hierarchical'       => 1,
    'title_li'           => __( 'Categories' ),
    'show_option_none'   => __( 'No categories' ),
    'number'             => null,
    'echo'               => 1,
    'depth'              => 0,
    'current_category'   => 0,
    'pad_counts'         => 0,
    'taxonomy'           => 'category',
    'walker'             => null
); ?>

各項目の説明はこちらを参考にして欲しい。

では、カテゴリのみに言及させて頂く事にするが、‘show_count’ => 0,の項目を見て頂きたい。
ここで、0というのが非表示で、1にすると表示するという設定になる。

説明はしたものの、ここで0を1に書き換えよ、という訳ではない。この関数に1を持っていくという作業が必要になる。

設定してみる

さて、上述した設定をするのは、sidebar.phpの中だ。テーマによっては違う場合もあるが、ほとんどはこの形である筈なのでこちらの設定方法のみ説明する事にする。

sidebar.php (場所:[外観]⇒[テーマの編集]のサイドバーにある)

<ul class="side_category">
 <?php wp_list_categories('orderby=count&order=desc&show_count=1&title_li='); ?>
</ul>

上記のようにwp_list_categoriesを探し出し書き換えるというか追記する。そう、前述したshow_count=1を追加した形である。これを引数としてもって行く事により、先程の0が1に変わり表示されるようになるのだ。

どうだろう、表示されただろうか。テーマによっては形が崩れていたり、改行されてて格好が悪いと感じる方もいるであろうから、もう一つ処方箋を出しておく事にする。

記事数をリンクに含める

記事数をリンクに含める事によって、形の崩れが解消出来る場合もあるので書いておく事にする。

やり方は非常に簡単で、以下のソースコードをfunctions.phpに追加するだけである。

functions.phpの一番下に追加 (場所:[外観]⇒[テーマの編集]のサイドバーにある)

add_filter( 'wp_list_categories', 'my_list_categories', 10, 2 );
function my_list_categories( $output, $args ) {
  $output = preg_replace('/<\/a>\s*\((\d+)\)/',' ($1)</a>',$output);
  return $output;
}

以上だ。

<コメントを残す>

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

以下のタグと属性が使えます。

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>