How do I exclude the current post from listing in recent posts

I list my two most recent posts from a widget on the sidebar. When I’m viewing one of these posts from single.php, I want that post to be excluded from the list and instead show the next post in order.

single.php looks something like this:

Read More
<?php if ( have_posts() ) : ?>

    <?php while ( have_posts() ) : the_post(); ?>

    [Content]

    <?php endwhile; else : ?>

    [If no post is found]

<?php endif; ?>

and here’s the code in the PHP-widget:

<?php $the_query = new WP_Query( 'showposts=2' ); ?>
<?php while ($the_query -> have_posts()) : $the_query -> the_post(); ?>

    [Recent posts]

<?php endwhile;?>

Edit – the solution:

<?php global $post; $args = array('showposts' => 2, 'post__not_in' => array( $post->ID )); query_posts( $args ); if (have_posts()) : while (have_posts()) : the_post(); ?>

    [Recent posts]

<?php endwhile; wp_reset_query(); endif; ?>

Related posts

Leave a Reply

1 comment

  1. The post__not_in arg should work for you:

    $args = array(
    'numberposts' => 5,
    'offset' => 0,
    'category' => 7,
    'post__not_in' => array( $post->ID )
    );
    $myposts2 = get_posts($args);