2023.08.26(更新日: 2023.08.27)
日付ページでサブクエリを使用するときは、年月を指定してあげる必要がある
はじめに
今朝、当サイトで以前作成した「サンプル」という投稿を一覧から削除した。
その時に、post__not_inで一覧から削除したい投稿のIDを指定した。
そうすると、年月ごとの一覧ページで意図した年月の記事が表示されなくなってしまった。
年月ごとの一覧ページ
年月ごとの一覧ページとは、以下のようなページのことだ。
この例の場合、2023年8月に投稿した記事のみが表示されている。
意図した記事が表示されなかった時のソースコード
<?php
$my_query = new WP_Query(
array(
'post__not_in' => array(3874),
)
)
);
if ( $my_query->have_posts() ) :
while ( $my_query->have_posts() ) :
$my_query->the_post();
?>
<div class="all-article__link front-sec__flex-item">
<?php echo get_template_part("template-parts/blog-list"); ?>
</div>
endwhile;
endif;
wp_reset_postdata();
?>
サブクエリの引数「post__not_in」で、除外したい記事をIDで指定したら、意図した年月の投稿が表示されなくなってしまった。
例えば、2022年3月のページなのに、2023年6月の投稿が表示されてしまったりしていた。
意図した年月の投稿が表示されなくなってしまっていた原因
サブループを使用したことで、日付ページのメインループが効かなくなってしまったためと考えられる。
メインループとは、それぞれのページが持っている基本的なループのことで、日付ページの場合は、そのページの年月の記事のみが表示されるようになる。
例えば、2023年8月のページなら2023年8月の記事のみが表示される。
意図した年月の投稿を表示させた方法
<?php
$my_query = new WP_Query(
array(
'post__not_in' => array(3874),
'date_query' => array(
array(
'year' => get_query_var('year'),
'month' => get_query_var('monthnum'),
),
)
)
);
if ( $my_query->have_posts() ) :
while ( $my_query->have_posts() ) :
$my_query->the_post();
?>
<div class="all-article__link front-sec__flex-item">
<?php echo get_template_part("template-parts/blog-list"); ?>
</div>
endwhile;
endif;
wp_reset_postdata();
?>
サブループの「date_query」で年月を指定することで、意図した年月の投稿が表示されるようになった。
get_query_var('year')
で、そのページの年が取得できる。
月を取得する場合は、get_query_var('monthnum')
とする。
投稿ID : 15160
コメントを残す