Get post ID’s from one query and exclude from another

I have 2 instances of the WP_Query class, one showing 4 “Featured” posts and another showing “basic” posts.

What I want to do is exclude those 4 latest “Featured” posts from the basic query. I assume it’s just a case of adding a post__not_in variable but how can I get the ID’s from the first query and exclude them from the second?

Related posts

1 comment

  1. While running the loop of the first query, just collect the IDs into an array. Example:

    // define your first query's arguments
    $args1 = array(
        ... your first query args
    );
    $query1 = new WP_Query($args1);
    while ( $query1->have_posts() ): $query1->the_post();
        // this is your loop. Do whatever you want here
        // add this in the loop to collect the post IDs
        $exclude_posts[] = $post->ID;
    endwhile;
    
    // define your second query's arguments
    $args2 = array(
        'post__not_in' => $exclude_posts,
        ... rest of your parameters
    );
    $query2 = new WP_Query($args2);
    while ( $query2->have_posts() ): $query2->the_post();
        // this is your second loop. Do whatever you want here
    endwhile;
    wp_reset_postdata();
    

Comments are closed.