ターム別年アーカイブ覚書

情報を追記している場合はありますが、古い情報を訂正はしていませんので、公開年月日を参照してください。プラグイン・タグ、いずれもワードプレス・PHPのバージョン等によって動作しない場合もあります。

taxonomy.php にリストを自動で出すための記述

<ul><?php
$term_xxx = get_query_var('xxx_cat');
$term_year = get_query_var('year');
query_posts( array('post_type'=>'xxx','taxonomy'=>'xxx_cat','term'=>$term_xxx,'nopaging'=>1) );
$prev_year = null;
if ( have_posts() ) {
   while ( have_posts() ) {
      the_post();
      $this_year = get_the_date('Y');
      if ($prev_year != $this_year) {
          if (!is_null($prev_year)) {
          }
          echo '<li';
      if ($term_year == $this_year) {echo ' class="current"';}
          echo '><a href="' . $home . '/date/' . $this_year . '?xxx_cat=' . $term_xxx . '">' . $this_year . '</a></li>';
      }
      $prev_year = $this_year;
   }
}
wp_reset_query(); ?></ul>

タームのトップにアクセス時は今年度の一覧を表示するfunctions の記述。年別アーカイブはパラメーター付きで表示するためパラメーターの有無で分岐

    if ( ! is_admin() && $query->is_main_query() && (is_tax('xxx_cat')) ) {
         if (!isset($_GET['xxx_cat'])) {
        $thisyear = date('Y');
        $query->set( 'year', $thisyear );
        $query->set( 'posts_per_page', '-1' );
    }
    }

今年度の投稿がない場合は前年度にリダイレクトするためheader の最初に記述

<?php $thisyear = date('Y'); $preyear = $thisyear - 1; $term_xxx = get_query_var('xxx_cat'); ?>
<?php if (is_tax('xxx_cat') && !isset($_GET['xxx_cat']) && !have_posts()) { wp_redirect('/date/' . $preyear . '?xxx_cat=' . $term_xxx);} ?>