【WordPress】年別アーカイブリストの「年」が表示されないバグに対応する2つの対応策
WordPress2016年11月15日
WordPressでサイドバーなどにアーカイブリストを表示する際、wp_get_archives関数を使用するのがセオリーです。
しかし、wp_get_archivesでオプションにtype=yearly(年別)を指定し年別のアーカイブリストを表示しようとすると、「2016」のように「年」が付かないバグがあります。
- ※バージョン4.6.1で確認
この現象にはいくつかの解消方法がありますので、それぞれの方法についてご紹介いたします。サイトデザインやテーマに応じて使い分けていただければ幸いです。
対応策①:正規表現で置換
functions.phpに以下のコードを追記述します。
function archives_year_fix($html){
if(preg_match('/[0-9]+?</a>/', $html))
$html = preg_replace('/([0-9]+?)</a>/', '$1年</a>', $html);
return $html;
}
add_filter('get_archives_link', 'archives_year_fix', 10);
テンプレート側からの呼び出しは通常通り以下の記述でOKです。
<?php wp_get_archives('type=yearly'); ?>
解説
生成されるhtmlソースをpreg_replace関数で正規表現を使って置換します。
if文で年号が表示されていない場合を判定し、半角英数字が何文字が続いた場合、すなわち「2016」などの年号をpreg_match関数で「2016」→「2016年」に置換しています。
対応策②:「</a>」を「年</a>」に置換
①同様preg_replace関数で対処する点は同じですが、もっと単純に置換します。functions.phpに以下のコードを追加記述します。
function archives_year_fix($html) {
return preg_replace('/</a>/', '年</a>', $html);
}
add_filter('get_archives_link', 'archives_year_fix');
解説
解説というほどのものでもありませんが。。。
「</a>」を「年</a>」に置換しているだけです。本当にそれだけです。こっちのほうが簡単かもしれませんね。
まとめ
いずれの手順もWordPressのバージョンアップで対応された場合、不要な機能となります。
2016年11月5時点のバージョン4.6.1では解消されてないようですが、今後もし解消された場合は記述をfunction.phpから削除することをおすすめいたします。
この記事を読んでいる方にオススメの記事
- ※承認制のため、即時には反映されません。
この記事にコメントする