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

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

WordPress で年別アーカイブリストを表示する方法を紹介します。
例えば、企業の沿革ページで年別アーカイブリストを表示したい場合に便利な方法です。

年別のアーカイブリストを表示

普通は wp_get_archives() を使うのが一般的ですが、この方法では作成されるタグをカスタマイズに対応できません。そこで、少し強引ですが WP_Query を使って年別アーカイブリストを作成します。
次のコードは、カスタム投稿のスラッグが news の場合の表示方法です。

<?php // 年別アーカイブリストを表示
$year=NULL; // 年の初期化
$args = array( // クエリの作成
'post_type' => 'news', // 投稿タイプの指定
'orderby' => 'date', // 日付順で表示
'posts_per_page' => -1 // すべての投稿を表示
);
$the_query = new WP_Query($args); if($the_query->have_posts()){ // 投稿があれば表示
echo '<ul class="year-list">';
while ($the_query->have_posts()): $the_query->the_post(); // ループの開始
if ($year != get_the_date('Y')){ // 同じ年でなければ表示
$year = get_the_date('Y'); // 年の取得
echo '<li><a href="'.home_url( '/', 'http' ).'news/'.$year.'">'.$year.'年</a></li>'; // 年別アーカイブリストの表示
}
endwhile; // ループの終了
echo '</ul>';
wp_reset_postdata(); // クエリのリセット
}
?>

投稿の場合は post_typepost を指定してください。
ループ中のif文の中で年を取得しているので、ループ中は同じ年を飛ばして次の年を取得します。
年の取得には非公開記事も含まれるため、非公開記事を除外したい場合は post_status を追加して publish を指定しましょう。

メリット

・表示をカスタマイズできる
・リンクを調整できる
この方法のメリットは表示をカスタマイズできる点にあります。
HTML をリスト形式以外で生成したい場合に適しています。

デメリット

・順番並び替え系プラグインを使っているとうまく表示できない場合がある
この方法のデメリットは、順番の並び替え系プラグインを使用している場合に注意が必要なことです。
順番を投稿年でソートしない場合に、各投稿の投稿年が2019年・2018年・2020年のように並んでいるとその通りの表示になってしまいます。
この場合はプラグインを無効化するか、WordPress プラグインの Intuitive Custom Post Order を使って、任意の投稿タイプだけを並び替えが有効になるようにしてください。

まとめ

WordPress で年別アーカイブリストを表示する方法を紹介しました。

スポンサーリンク

合わせて読みたい関連記事