List posts by category exclude current post

I’m trying to get a list of posts from one category, echo the title and the permalink of all posts on that category but exclude the permalink and the post name IF the current post is on that list.

It will be displayed on single.php after or inside the loop

Read More

Anyone knows if it is possible, if so how?

Thanks in advance

<?php query_posts('category_name=MyCatName&showposts=-1'); ?>
<?php while (have_posts()) : the_post(); ?>

        <a href="<?php the_permalink(); ?>">
          <?php the_title(); ?>
          </a>
        <?php endwhile; ?>

Related posts

Leave a Reply

2 comments

  1. First off, note that, since your custom loop is a secondary loop/query, you should use the WP_Query class instead of query_posts(). Read why.

    That being said,

    /* main post's ID, the below line must be inside the main loop */
    $exclude = get_the_ID();
    
    /* alternatively to the above, this would work outside the main loop */
    global $wp_query;
    $exclude = $wp_query->post->ID;
    
    /* secondary query using WP_Query */
    $args = array(
        'category_name' => 'MyCatName', // note: this is the slug, not name!
        'posts_per_page' => -1 // note: showposts is deprecated!
    );
    $your_query = new WP_Query( $args );
    
    /* loop */
    echo '<ul>';
    while( $your_query->have_posts() ) : $your_query->the_post();
        if( $exclude != get_the_ID() ) {
            echo '<li><a href="' . get_permalink() . '">' .
                get_the_title() . '</a></li>';
        }
    endwhile;
    echo '</ul>';
    

    that’ll do.

  2. Based on Johannes’ code, but using the post__not_in argument:

    /* Secondary query using WP_Query */
    $wpse63027_posts = new WP_Query( array(
        'category_name'  => 'MyCatName',
        'posts_per_page' => -1,
        'post__not_in'   => array( get_queried_object_id() ), // Exclude current post ID (works outside the loop)
    ) );
    

    Then you can loop through the new posts:

    if ( $wpse63027_posts->have_posts() )
    {
        while( $wpse63027_posts->have_posts() )
        {
            $wpse63027_posts->the_post();
    
            // Now do everything you want with the default API calls
            // Example
            the_title( '<h2>', '</h2>', true );
            the_content();
        }
    }
    

    WP_Query » Post_*/Page_Parameters