回答編集履歴

1 修正

CHERRY

CHERRY score 17292

2019/05/15 21:09  投稿

なるほど...
まず、`is_year()` は、年アーカイブのチェック関数なので、`http://example.com/2019/` のような 数字4桁の年付きの URL でアクセスされた場合のみ有効です。
 
年アーカイブ以外のときは、false になります。
また、日付アーカイブ以外の URL にアクセスした場合には、年の値がないので、`get_query_var( 'year' );` は、null になります。  
[関数リファレンス/is_year](https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/is_year)
また、ページ表示で、メインクエリーは1回しか実行されませんので、タブに分けた複数年を取得するには向かないと思います。
また、日付アーカイブ以外の URL にアクセスした場合には、年の値がないので、`get_query_var( 'year' );` は、null になります。
pre_get_posts を考えられているようですが、メインクエリーは1回しか実行されませんので、タブに分けた複数年を取得するにはちょっと向かないと思います。
----
出先なので、おおまかな概念だけになりますが...
```
<div class="panel_area">
<div id="panel1" class="tab_panel">
<?php
$date_from1= 〜 ;
$date_to1 = 〜 ;
$args1 = array(
   'post_type' => 'post',
   'date_query', array(
       'compare' => 'BETWEEN',
       'after' => $date_from1,
       'before' => $date_to1,
       'inclusive' => true,
   )
);
$query1 = new WP_Query( $args1 );
if ( $query1->have_posts() ) {
   while ( $query1->have_posts() ) {
       $query1->the_post();
       echo '<li>' . get_the_title() . '</li>';
   }
   wp_reset_postdata();
}
?>
</div>
<div id="panel2" class="tab_panel">
<?php
$date_from2= 〜 ;
$date_to2 = 〜 ;
$args2 = array(
   'post_type' => 'post',
   'date_query', array(
       'compare' => 'BETWEEN',
       'after' => $date_from2,
       'before' => $date_to2,
       'inclusive' => true,
   )
);
$query2 = new WP_Query( $args2 );
if ( $query2->have_posts() ) {
   while ( $query2->have_posts() ) {
       $query2->the_post();
       echo '<li>' . get_the_title() . '</li>';
   }
   wp_reset_postdata();
}
?>
</div>
<div id="panel3" class="tab_panel">
<?php
$date_from3= 〜 ;
$date_to3 = 〜 ;
$args3 = array(
   'post_type' => 'post',
   'date_query', array(
       'compare' => 'BETWEEN',
       'after' => $date_from3,
       'before' => $date_to3,
       'inclusive' => true,
   )
);
$query3 = new WP_Query( $args3 );
if ( $query3->have_posts() ) {
   while ( $query3->have_posts() ) {
       $query3->the_post();
       echo '<li>' . get_the_title() . '</li>';
   }
   wp_reset_postdata();
}
?>
</div>
```
の用な感じでどうでしょうか?

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る