Wordpressのサブループで一定回数後にクエリを変更したい
###実現したいこと
通常投稿にて指定カテゴリの記事を6件新着にて表示後、その指定カテゴリの記事を期間(過去6ヶ月)の範囲でランダムで6件(全部で12件)表示したくループを書こうと思ったのですが、途中でクエリを変更する事はできるのでしょうか。
<?php $today = date('Y/m/d'); //本日の日付 $setday = date('Y/m/d', strtotime('-6 month')); //6ヶ月前の日付 $args = array( 'post_type' => 'post', 'post_status' => 'publish', 'category_name' => 'カテゴリー名', 'posts_per_page' => 6 ); $the_query = new WP_Query($args); ?> <?php if($the_query->have_posts()): ?> <?php while ($the_query->have_posts()): $the_query->the_post(); ?> <!-- ここに新着を6件表示 --> <?php endwhile; ?> <!-- クエリ変更 --> <?php $the_query = null; ?> <?php $today = date('Y/m/d'); $setday = date('Y/m/d', strtotime('-6 month')); $args = array( 'post_type' => 'post', 'post_status' => 'publish', 'category_name' => 'カテゴリー名', 'date_query' => array( array( 'compare' => 'BETWEEN', 'inclusive' => true, 'before' => $today, 'after' => $setday ), ), 'orderby' => 'rand', 'posts_per_page' => 6 ); $the_query = new WP_Query($args); ?> <?php if($the_query->have_posts()): ?> <?php while ($the_query->have_posts()): $the_query->the_post(); ?> <!-- ここに上書きしたクエリの条件を表示 --> <?php endwhile; ?> <?php endif; ?> <?php else: ?> <!-- 投稿が無い場合 --> <?php endif; ?> <?php wp_reset_postdata(); ?>
試したこと
親ループを新着の条件でセットし endwhile の後に上記の条件をセットたのですが、案の定記事が重複してしまいました...
最初の条件をクリアしたのが原因でしょうか?
親でセットした条件を継承しつつクエリを追加できるのでしょうか。
よろしくお願いします。
解決コード
<!-- 新着記事を表示 --> <?php $args = array( 'post_type' => 'post', 'post_status' => 'publish', 'category_name' => 'カテゴリ', 'posts_per_page' => 6, 'fields' => 'ids' ); $the_query = new WP_Query($args); $post_ids = $the_query->posts; // 除外記事を取得 ?> <?php if($the_query->have_posts()): ?> <?php while ($the_query->have_posts()): $the_query->the_post(); ?> <!-- 投稿を表示 --> <?php endwhile; ?> <?php else: ?> <!-- 投稿が無い場合 --> <?php endif; ?> <?php wp_reset_postdata(); ?> <!-- 過去6ヶ月の記事をランダム表示 --> <?php $today = date('Y/m/d'); $setday = date('Y/m/d', strtotime('-6 month')); $args = array( 'post_type' => 'post', 'post_status' => 'publish', 'category_name' => 'カテゴリ', 'date_query' => array( array( 'compare' => 'BETWEEN', 'inclusive' => true, 'before' => $today, 'after' => $setday ), ), 'orderby' => 'rand', 'posts_per_page' => 6, 'post__not_in' => $post_ids //除外記事 ); $the_query = new WP_Query($args); ?> <?php if($the_query->have_posts()): ?> <?php while ($the_query->have_posts()): $the_query->the_post(); ?> <!-- 投稿を表示 --> <?php endwhile; ?> <?php else: ?> <!-- 投稿が無い場合 --> <?php endif; ?> <?php wp_reset_postdata(); ?>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/21 09:32