web関連

wordpressで月別、年別アーカイブの横に記事数を出力する方法

wordpressで月別、年別アーカイブの横に記事数を出力する方法

wordpressでアーカイブリストを出力したときに記事数も出したかったので調べた時の備忘録

wordpressでアーカイブを出力する方法

何も考えずただ出力をしたいんだ!という事であればこう書くととりあえず

<?php wp_get_archives(); ?>

アーカイブの横に記事数を出力する方法

<?php
// 書き方1
wp_get_archives( 'post_type=post&type=yearly&show_post_count=1' );
// 書き方2
wp_get_archives(array('post_type' => 'post', 'type' => 'yearly','show_post_count' => 1));
?>

show_post_countというパラメーターを使います。
「2018年 (17)」という風に出力されます。

書き方はどっちでもいいのだが、忘れないようにメモ

記事数の部分にcssを振れるようにする

上記の書き方だと記事数の(数字)部分にリンクが貼られないのと、(数字)の部分だけcssを当てたい時に対応できないので、「preg_replace」関数で文字列の置換をかけます。

<?php
$str = wp_get_archives(array('post_type' => 'post', 'type' => 'yearly','show_post_count' => 1,'echo' => 0));
$str_grep = preg_replace('/</a>&nbsp;(([0-9]*))/', ' <span class="count">$1</span></a>', $str);
echo $str_grep;
?>

(数字)があった時に、 $1に置換をかけています。

'echo' => 0が前述の出力方法と異なり追加されていますが、デフォルトが1なので0(False)にすることで値として取得できるみたい、変数に代入して使う場合は0(False)にする必要性があるかも。

「preg_replace」関数について少し調べていたのだがいまいち理解しきれず、第1引数で「()」で囲ったものが第2引数「$1」に入るって言う事なのかな?後でしっかり調べないとだな…

参考

▼【PHP入門】正規表現で置換する方法

【PHP入門】正規表現で置換する方法

ブログサイトなんかでアーカイブリストの「2018年(記事数)」という表記で「(記事数)」の部分だけcss変えてる人結構見かけるからクラス振れるようにしておくのはオススメ