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?


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;

// 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
| improve this answer | |
  • Well, your code had some mistakes. Unclosed brackets, undefined variables ($query - so it was causing infinite loops), and redundant wp_reset_query calls. It should be OK now. – Krzysiek Dróżdż Jul 29 '13 at 9:17
  • Krzysiek Dróżdż: I was not attempting to write full code but rather display the principle of it. – Biranit Goren Jul 29 '13 at 9:38
  • 1
    I know. But you shouldn't make mistakes in it. Unclosed brackets, using undefined variables ($query instead of $query1) are errors, not simplifications... – Krzysiek Dróżdż Jul 29 '13 at 9:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.