アーカイブのウィジェットで日付の年月(日本語表記)の文言を変更する
アーカイブウィジェットに表示される「Y年n月」という日付の表記は、普通に[設定]→[一般]での日付フォーマットの項目では変更できない。
これは、get_archives_link()が関係しており、この場合の日付の表記は日本語の翻訳ファイルに依存しているため、管理画面のフォーマットの設定とは切り離されているからだ。
今回、これの年月の部分を任意のもの(接続詞とでも言うべきか?)にする必要があった。
具体的には【2018年6月】→【2018-6】のような形にしたい。
が、よく紹介されている「年」や「月」をフィルターフックで単純に置き換えるだけの方法では少し拙い。
何故ならget_archives_link()はカテゴリーのリンクテキスト表示など、別の用途でも使用可能だからである。
つまり、意図せずしてそこに含まれる「年」や「月」が置き換えられてしまうのだ。
これを回避するため、「それは日付である」と認識できる文字列にマッチした条件で、この「年」「月」を置き換える必要がある。
当ブログではよく使用している正規表現の置換を利用する。
以下のコードは、念の為に年月日までの全てを入れ替えるように書いたもの。
無論、年月となっているものについてもいける。
function theme_override_get_archives_link( $link_html, $url, $text, $format, $before, $after ) { $separator = '-'; // 1桁日付をゼロ詰めする場合は以下のコメントアウトを外す。 // $link_html = preg_replace( '~年(\d)月~', '年0\1月', $link_html ); // $link_html = preg_replace( '~月(\d)日~', '月0\1日', $link_html ); $link_html = preg_replace( '~(\d+)年(\d+)月(\d+)日~', '\1' . $separator . '\2' . $separator . '\3', $link_html ); $link_html = preg_replace( '~(\d+)年(\d+)月~', '\1' . $separator . '\2', $link_html ); return $link_html; } add_filter( 'get_archives_link', 'theme_override_get_archives_link', 10, 6 );
これで別の用途でget_archives_link()を使用したとしても、日付であると認識できるもの、すなわち年月日の表記にマッチするものであれば、その全てを置き換えることができる。