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