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%」にしている場合の例です。
あとがき
あまり需要ないかもですが、標準の月別アーカイブではなく年別のアーカイブリストを表示させたい場合は、ぜひ参考にしてください。
はじめまして。
参考させていただいています!
素朴な質問ですが、URLに、date をはずしてはいけないでしょうか。
はずしたら動かなくなりました。。
コメントありがとうございます。
年別(月別も)アーカイブページのURLは、パーマリンク設定によって変わります。
パーマリンク設定が”数字ベース”になっている場合は、年別アーカイブページのURLは「/archives/date/2019」のようになります。パーマリンク設定が”基本”だった場合は「/?m=2019」、その他は単純に「/2019」のように年数のみになります。
URLの指定でdateを外したら動かなくなったということは、dateがあれば動くということでしょうか。そうであれば、パーマリンク設定が数字ベースになっていると思います。
こんばんは。コピーさせていただきました、ありがとうございます。
年別のアーカイブを作成できたのですが、投稿の作成年が今年だけなので、2021年の表示だけ出ていますが、2020年など2つ以上の年が存在した場合どのように表示されますでしょうか?
自分はコンボボックスのような形で表示させたいので、気になりました。
よろしくお願い致します。
記事内で紹介しているのはulリストでリンクを表示する方法です。
コンボボックス/セレクトボックスでの表示をされたいということでしたら、コードのカスタマイズが必要ですね。
こちらの記事が参考になるかと思います。