WordPressで月別アーカイブへのリンク一覧を出力する方法をご紹介いたします。
標準で「アーカイブ」というウィジェットが用意されていますが、ウィジェットエリア以外に表示したい時は、wp_get_archivesという関数を使えば簡単に月別アーカイブのリンク一覧を出力できます。
WordPressで月別アーカイブへのリンク一覧を出力する方法
リストで月別アーカイブへのリンク一覧を出力する
月別アーカイブの一覧をリスト形式で出力する場合は、以下のように記述します。
<ul>
<?php wp_get_archives( 'post_type=post&type=monthly&show_post_count=1' ); ?>
</ul>
HTMLは以下のように出力されます。
<ul>
<li><a href="https://example.com/2021/01/">2021年1月</a> (1)</li>
<li><a href="https://example.com/2020/12/">2020年12月</a> (5)</li>
</ul>
ちなみに、各パラメータは以下のように配列で渡してもOKです。
<ul>
<?php wp_get_archives( array( 'post_type' => 'post', 'type' => 'monthly', 'show_post_count' => 1 ) ); ?>
</ul>
セレクトボックスで月別アーカイブへのリンク一覧を出力する
月別アーカイブの一覧をセレクトボックスで出力したい場合は、以下のようにします。
<select name="archive-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
<option disabled selected value>月別アーカイブ</option>
<?php wp_get_archives( 'post_type=post&type=monthly&format=option&show_post_count=1' ); ?>
</select>
HTMLは以下のように出力されます。
<select name="archive-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
<option disabled="" selected="" value="">月別アーカイブ</option>
<option value="https://example.com/2021/01/">2021年1月 (1)</option>
<option value="https://example.com/2020/12/">2020年12月 (5)</option>
</select>
月別アーカイブリストにカレントクラスを追加する
該当の月の一覧を表示している時は背景色を変える等、月別アーカイブリストでカレント表示をしたいケースもあるかと思います。
その場合は、適用しているテーマのfunctions.phpに以下のようなコードを追加します。表示している月別アーカイブページが、月別アーカイブリストのリンク先と一致する場合は、出力されるliに.currentというクラスを追加しています。
function my_archives_link($link_html) {
$my_month = '/' . get_query_var('year') . '/' . sprintf("%02d", get_query_var('monthnum'));
if (strstr($link_html, $my_month)) {
$link_html = preg_replace('@<li>@i', '<li class="current">', $link_html);
}
return $link_html;
}
add_filter('get_archives_link', 'my_archives_link');
月の数字をゼロ埋めで表記する
デフォルトの状態では、1桁の月は”1月”や”2月”といったようにそのまま1桁で表記されます。これを”01月”や”02月”というように、ゼロ埋めで表記したい場合は、functions.phpに以下を追記します。”年”や”月”の部分を変更すれば、フォーマットも変えられます。
function my_gettext($translated_text, $original_text, $domain) {
if ($original_text == '%1$s %2$d') {
$translated_text = '%2$s年%1$02d月';
}
return $translated_text;
}
add_filter('gettext', 'my_gettext', 20, 3);
あとがき
パラメータを変更することで、色々なアーカイブ一覧を出力できます。例えば、post_typeの値をカスタム投稿名にしてカスタム投稿のアーカイブ一覧を出力したり、typeの値をyearlyにして年別のアーカイブ一覧を出力することも可能です。
指定できるパラメータの詳細については、Codexをご参照ください。