WordPress 年別アーカイブリストの表示に年を追加する方法

WordPress で年別アーカイブリストの表示に年を追加する方法を紹介します。
例えば、年別アーカイブと月別アーカイブを両方表示する時に便利な方法です。

  1. 年別アーカイブリストの表示方法
    1. アーカイブリストに「年」を表示する
    2. 月別アーカイブリストの併記にも対応した正規表現での対処方法

年別アーカイブリストの表示方法

まずは wp_get_archives を使って年別アーカイブリストの表示方法を紹介します。
例えば、投稿タイプ blog に投稿数を表示した年別アーカイブリストを表示する時は、
次のコードをテンプレートに追加します。

<ul>
<?php wp_get_archives( 'post_type=blog&type=yearly&show_post_count=1' ); ?>
</ul>

リストは次のように表示されます。

2019(1)
2018(2)
2017(3)

アーカイブリストに「年」を表示する

アーカイブリストに「年」を表示するために preg_replace を使って、</a>を年</a>に置き換えて「年」を表示します。
次のコードを function.php に追加します。

/*【出力カスタマイズ】年別アーカイブリストに年を表示する */
function my_get_archives_link($html){
return preg_replace ( '/<\/a>/', '年</a>', $html );
}
add_filter('get_archives_link','my_get_archives_link');

これで年が表示されているかと思いますが、
年別と月別アーカイブを併記していると、
月別アーカイブの表示に意図しない「年」が表示されてしまうことがあります。

月別アーカイブリストの併記にも対応した正規表現での対処方法

年別と月別アーカイブリストの併記にも対応するには、
年の表記をいくつかのパターンに対応した正規表現での書き換えを行うことにします。
この方法は Simple Colors さんで紹介されいてる「WordPressの年別アーカイブリストの表示に「年」を追加する」を参考にしています。
次のコードを function.php に追加します。

/*【出力カスタマイズ】年別アーカイブリストに年を表示する */
function add_nen_year_archives( $link_html ) {
$regex = array (
"/ title='([\d]{4})'/" => " title='$1年'",
"/ ([\d]{4}) /" => " $1年 ",
"/>([\d]{4})<\/a>/" => ">$1年</a>"
);
$link_html = preg_replace( array_keys( $regex ), $regex, $link_html );
return $link_html;
}
add_filter( 'get_archives_link', 'add_nen_year_archives' );

この状態で、月別と年別アーカイブリンクの表示を確認してください。

まとめ

WordPress で年別アーカイブリストの表示に年を追加する方法を紹介しました。