WordPress ターム別の年別アーカイブリストの表示方法

WordPress ターム別の年別アーカイブリストの表示方法

WordPress でターム別に年別アーカイブのリンクリストの表示方法を紹介します。
例えば、カテゴリ別に年別アーカイブのリンクリストを表示したいときに便利な方法です。

  1. ターム別の年別アーカイブリンクリストの表示方法
  2. サブループベースのターム別の年別 アーカイブリンクリストの表示方法

ターム別の年別アーカイブリンクリストの表示方法

ターム(カテゴリ)別の年別アーカイブリンクリストを表示するために query_posts を使います。
例えば、カスタム投稿タイプのスラッグが information で、タクソノミースラッグが information-cat 、タームスラッグが pickup の場合の、ターム別の年別アーカイブリンクリストの表示方法です。

<?php // ターム(カテゴリ)別の年別 アーカイブリンクリストの表示
$post_type = 'information'; // アーカイブで取得したい投稿タイプを指定
$taxonomy_slug = 'information-cat'; // アーカイブで取得したいタクソノミーを指定
$term_slug = 'pickup'; // アーカイブで取得したいタームを指定
$home_url = get_bloginfo('url');
query_posts( array( // クエリの設定
'post_type' => $post_type, // 投稿タイプを指定
'taxonomy' => $taxonomy_slug, // タクソノミーを指定
$taxonomy_slug => $term_slug, // タームを指定
'nopaging' => 1 // 該当するすべての投稿
));
$prev_year = null; // 値「null」をセット
if (have_posts()){ // 投稿のループがあれば表示
while (have_posts()){ // ループの開始
the_post(); // 次の投稿へ進める
$this_year = get_the_date('Y'); // 投稿の年を取得
if ($prev_year != $this_year) { // $prev_year と $this_year が等しくなければ true(真)で表示
echo '<a href="'.$home_url.'/date/'.$this_year.'?'.$taxonomy_slug.'='.$term_slug.'">'.$this_year.'</a>'; // カテゴリ別の年別アーカイブのリンク
}
$prev_year = $this_year; // 同じ年が連続して表示されないように $prev_year に $this_year を代入
}
}
wp_reset_query();
?>

コードの2行目から4行目までに入力が必要な項目をまとめているので、WordPress 初心者の方にも使いやすくまとめています。

サブループベースのターム別の年別アーカイブリンクリストの表示方法

出力のカスタマイズをしたい人はこちらの方法がおすすめ、サブループベースのターム(カテゴリ)別の年別アーカイブリンクリストの表示方法を紹介します。
例えば、カスタム投稿タイプのスラッグが information で、タクソノミースラッグが information-cat 、タームスラッグが pickup の場合の、ターム別の年別アーカイブリンクリストの表示方法です。

<?php // ターム(カテゴリ)別の年別アーカイブリストの表示
$post_type = 'information'; // アーカイブで取得したい投稿タイプを指定
$taxonomy_slug = 'information-cat'; // アーカイブで取得したいタクソノミーを指定
$term_slug = 'pickup'; // アーカイブで取得したいタームを指定
$home_url = get_bloginfo('url'); // サイトのURLを取得
$args = array(
'post_type' => $post_type, // 投稿タイプを指定
'post_status' => 'publish', // 公開済み
'posts_per_page' => -1, // すべての投稿
'tax_query' => array(
array(
'taxonomy' => $taxonomy_slug, // タクソノミースラッグを指定
'field' => 'slug',
'terms' => $term_slug, // 絞り込むタームスラッグを指定
)
)
);
$prev_year = null; // 値「null」をセット
$the_query = new WP_Query($args); if($the_query->have_posts()){ // 投稿があれば表示
while ($the_query->have_posts()){ // ループ開始
$the_query->the_post(); // 次の投稿へ進める
$this_year = get_the_date('Y'); // 投稿の年を取得
if ($prev_year != $this_year) { // $prev_year と $this_year が等しくなければ true(真)で表示
echo '<a href="'.$home_url.'/date/'.$this_year.'?'.$taxonomy_slug.'='.$term_slug.'">'.$this_year.'</a>'; // カテゴリ別の年別アーカイブのリンク
}
$prev_year = $this_year; // 同じ年が連続して表示されないように $prev_year に $this_year を代入
}
wp_reset_postdata();
}
?>

こちらもコードの2行目から4行目までに入力が必要な項目をまとめています。
サブループをベースにしているので、中級者の方はこちらの方がカスタマイズしやすいと思います。

まとめ

WordPress でターム別に年別アーカイブのリンクリストを表示する方法を紹介しました。
そのほかのターム詳しい表示方法はWordPress ターム情報の取得と表示方法をご覧ください。