WordPressで月別アーカイブへのリンク一覧を出力する方法

WordPressで月別アーカイブへのリンク一覧を出力する方法

WordPressで月別アーカイブへのリンク一覧を出力する方法

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をご参照ください。

この記事が気に入ったら
いいね!してね♪

Twitter で

コメントを残す

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