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

年別アーカイブリスト(対策前)
年別アーカイブリスト(対策前)

WordPressでwp_get_archivesを使って年別のリストを表示させると、右図のように数字だけの表示になってしまい、なんとなく物足りない感じになってしまいます。
これは、なにも日本語化がうまくいっていないのではなく、そもそも翻訳のための機能を通っていないため、英語圏そのままの表示にしかならないためです。

ただ、やっぱり日本人としては「nnnn年」のような表示にしたいところではないでしょうか。

wp_get_archives のフックは、表示する項目ごとに get_archives_link というフィルターフックを通るので、このフックを用いて「年」を追加します。

フックの引数として、wp_get_archivesの引数があれば、条件に応じた正規表現を用いることができるのですが、ここでは、単にフィルターの対象となるHTMLのソースしか取れないため、全パターンに対応できるような正規表現での書き換えを行うことにします。

HTMLのソースを生成しているのは、wp-includes/general-template.phpのget_archives_link関数で該当部分のコードはCODE 1のようになっています。

CODE 1

	if ('link' == $format)
		$link_html = "\t<link rel='archives' title='$title_text' href='$url' />\n";
	elseif ('option' == $format)
		$link_html = "\t<option value='$url'>$before $text $after</option>\n";
	elseif ('html' == $format)
		$link_html = "\t<li>$before<a href='$url' title='$title_text'>$text</a>$after</li>\n";
	else // custom
		$link_html = "\t$before<a href='$url' title='$title_text'>$text</a>$after\n";

	$link_html = apply_filters( "get_archives_link", $link_html );

ここで、年の数字は、$text または $title_text として扱われていています。
これらを網羅するパターンは下記の3つ

  1. 半角スペース + title= + シングルクォートに挟まれた4桁の数字
  2. 半角スペースに挟まれた4桁の数字
  3. > + 4桁の数字 + </a>
年別アーカイブリスト(対策後)
年別アーカイブリスト(対策後)

これらのパターンに対して、それぞれ4桁の数字の後に「年」付け加える場合の置換を行う文字列を配列として、preg_replaceで置換処理を行います。

CODE 2を適用させた場合の表示は、右図のとおりです。

CODE 2

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' );

コメントを残す

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