芝生やDIY等のライフハックやWeb制作情報を発信するメディア

メニューを開く

【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から削除することをおすすめいたします。

この記事を読んでいる方にオススメの記事

「WordPress」の他の記事を読む

この記事にコメントする

必須
必須
本文必須

  • 承認制のため、即時には反映されません。

ページの先頭に戻る