WordPressで年別アーカイブのリストを表示する方法

WordPressで年別アーカイブのリストを表示する方法

WordPressで年別アーカイブのリストを表示する方法

WordPressには、デフォルトで「アーカイブ」というウィジェットが用意されていますが、アーカイブウィジェットでは月別のアーカイブが表示されます。

更新頻度がそんなに高くなく、月別ではなく年別でアーカイブのリストを表示したいこともあるかと思います。そんな時のために、年別アーカイブのリストを表示させる方法をご紹介したいと思います。

WordPressで年別アーカイブのリストを表示する方法

まず、functions.phpに以下を追加します。


function get_archives_by_year( $args = '' ) {
  global $wpdb, $wp_locale;
  $defaults = array (
    'post_type' => 'post', //投稿タイプ
    'limit' => '',
    'format' => 'html',
    'before' => '',
    'after' => '',
    'show_post_count' => false,
    'echo' => 1
  );
  $parse = wp_parse_args( $args, $defaults );
  extract ( $parse, EXTR_SKIP );
  if ( '' != $limit ) {
    $limit = absint( $limit );
    $limit = ' LIMIT ' . $limit;
  }
  $arcresults = (array) $wpdb->get_results(
    "SELECT YEAR(ADDDATE(post_date, INTERVAL -3 MONTH)) AS `year`, COUNT(ID) AS `posts`
    FROM $wpdb->posts
    WHERE post_type = '$post_type' AND post_status = 'publish'
    GROUP BY YEAR(ADDDATE(post_date, INTERVAL -3 MONTH))
    ORDER BY post_date DESC
    $limit"
  );
  return $arcresults;
}

「post_type」で表示したい投稿タイプを指定します。

年別アーカイブを表示させたい箇所に、以下コードを記述します。


<ul class="year-archives-list">
<?php
  $archives = get_archives_by_year();
  foreach($archives as $archive):
?>
<li>
  <a href="<?php echo home_url() ?>/archives/date/<?php echo esc_html($archive->year) ?>"><?php echo esc_html($archive->year) ?>年</a>
</li>
<?php endforeach; ?>
</ul>

「/archives/date/」のところは、パーマリンク設定に合わせて変更してください。上記は、パーマリンク設定を「/archives/%post_id%」にしている場合の例です。

あとがき

あまり需要ないかもですが、標準の月別アーカイブではなく年別のアーカイブリストを表示させたい場合は、ぜひ参考にしてください。

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

Twitter で

4 thoughts on “WordPressで年別アーカイブのリストを表示する方法

  1. しん

    はじめまして。
    参考させていただいています!
    素朴な質問ですが、URLに、date をはずしてはいけないでしょうか。
    はずしたら動かなくなりました。。

    1. himecas Post author

      コメントありがとうございます。

      年別(月別も)アーカイブページのURLは、パーマリンク設定によって変わります。

      パーマリンク設定が”数字ベース”になっている場合は、年別アーカイブページのURLは「/archives/date/2019」のようになります。パーマリンク設定が”基本”だった場合は「/?m=2019」、その他は単純に「/2019」のように年数のみになります。

      URLの指定でdateを外したら動かなくなったということは、dateがあれば動くということでしょうか。そうであれば、パーマリンク設定が数字ベースになっていると思います。

  2. torii

    こんばんは。コピーさせていただきました、ありがとうございます。
    年別のアーカイブを作成できたのですが、投稿の作成年が今年だけなので、2021年の表示だけ出ていますが、2020年など2つ以上の年が存在した場合どのように表示されますでしょうか?
    自分はコンボボックスのような形で表示させたいので、気になりました。
    よろしくお願い致します。

    1. himecas Post author

      記事内で紹介しているのはulリストでリンクを表示する方法です。
      コンボボックス/セレクトボックスでの表示をされたいということでしたら、コードのカスタマイズが必要ですね。
      こちらの記事が参考になるかと思います。

コメントを残す

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