Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

How can I exclude one specific post from a WP_Query query? (For example, show all posts apart from a post with the ID 278)

I've tried the post__not_in argument but it just removes all posts..

Any help would be great.

Here is my current query

<?php
    $temp = $wp_query;
    $wp_query= null;
    $wp_query = new WP_Query(array(
        'post_type' => 'case-study',
        'paged' => $paged,
    ));
    while ($wp_query->have_posts()) : $wp_query->the_post();
?>

Thanks

share|improve this question

3 Answers 3

up vote 1 down vote accepted

I just tested the below code, and it works:

            <?php
                $q1 = new WP_query(array('category_name' => 'test-cat-1', 'order' => 'ASC'));
                if($q1->have_posts()) :
                $firstPosts = array();
                    while($q1->have_posts()) : $q1->the_post();
                    $firstPosts[] = $post->ID;
            ?>      
                    <div class="item">
                        <h2><?php the_title(); ?></h2>
                    </div>
            <?php       
                    endwhile;
                endif;

 /*****************************************************************************/

                $q2 = new WP_query(array('post__not_in' => $firstPosts, 'order' => 'ASC' ));

                if($q2->have_posts()) :
                    while($q2->have_posts()) : $q2->the_post();
            ?>      
                    <div class="item">
                        <h2 class="item-title"><?php the_title(); ?></h2>
                    </div>
            <?php       
                    endwhile;
                endif;
            ?>

The first loop displays all posts in a category, and collects the post id's into an array.

The second loop displays all posts, excluding posts from the first loop.

share|improve this answer
    
Perfect, thank you! –  Dean Elliott Sep 15 '12 at 20:38
    
On another note, Is there a way to add wp-pagenavi to the 2nd query? –  Dean Elliott Sep 15 '12 at 22:21
1  
In case you ever revisit your answer: Please fix your code markup/intending. Thanks. –  kaiser Oct 12 at 13:27

The parameter you are looking for is post__not_in (kaiser has a typo in his answer). So the code could be like:

<?php
$my_query = new WP_Query(array(
    'post__not_in' => array(278),
    'post_type' => 'case-study',
    'paged' => $paged,
));
while ($my_query->have_posts()) : $my_query->the_post(); endwhile;
share|improve this answer
    
You know, there are edits for correcting typos :) –  kaiser Oct 12 at 13:25

You have to define the post__not_in arg as array. Even for a single value. And please don't overwrite global core variables with temporary stuff.

<?php
$query = new WP_Query( array(
    'post_type'    => 'case-study',
    'paged'        => $paged,
    'post__not_in' => array( 1, ),
) );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
    $query->the_post();

    // do stuff

} // endwhile;
} // endif;
?>
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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