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

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

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

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

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

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

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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」で表示したい投稿タイプを指定します。

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

01
02
03
04
05
06
07
08
09
10
<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リストでリンクを表示する方法です。
      コンボボックス/セレクトボックスでの表示をされたいということでしたら、コードのカスタマイズが必要ですね。
      こちらの記事が参考になるかと思います。

torii へ返信する コメントをキャンセル

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