Best way to prevent post duplication when using multiple loops

I have the following loops on a page on my website.

Whats the best way to adapt the code below to stop the post in my first loop, being repeated in the second?

    ?php query_posts('showposts=1post_type=post'); ?

?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?
div id="latestpost" ?php

    if ( $thumbnail_id = get_post_thumbnail_id() ) {
        if ( $image_src = wp_get_attachment_image_src( $thumbnail_id, 'normal-bg' ) )
            printf( ' style="background-image: url(%s);"', $image_src[0] );     
    }

?

    article id="post-?php the_ID(); ?" ?php post_class(); ?
                    a href="?php the_permalink(); ?" title="?php the_title(); ?"



    h2?php the_title() ;?/h2      
    div class="summary" style="color:#fff;"
        ?php the_excerpt(); ?
        /div
    !-- ?php the_post_thumbnail(); ? --
?php endwhile; else: ?

    pSorry, there are no posts to display/p
                    /a!-- permalink --
?php endif; ?
    /article
/div!-- latest post --

?php wp_reset_query(); ?


div id="postlist"

h2Personal finances/h2

?php query_posts('showposts=3post_type=postcategory_name=Personal');
 ?

?php if ( have_posts() ) : while ( have_posts() ) : the_post();  ?

    !-- article --
    article id="post-?php the_ID(); ?" ?php post_class(); ?
        !-- post title --
        div class="post-thumbnail"
        !-- post thumbnail --
        ?php if ( has_post_thumbnail()) : // Check if thumbnail exists ?
            a href="?php the_permalink(); ?" title="?php the_title(); ?"
                ?php the_post_thumbnail(array(120,120)); // Declare pixel size you need inside the array ?
            /a
        ?php endif; ?
        !-- /post thumbnail --
        /div

        h3 class="postlist-article-header"
            a href="?php the_permalink(); ?" title="?php the_title(); ?"?php the_title(); ?/a
        /h3
        !-- /post title --


    /article
    !-- /article --

?php endwhile; ?

?php else: ?

    !-- article --
    article
        h2?php _e( 'Sorry, nothing to display.', 'html5blank' ); ?/h2
    /article
    !-- /article --

?php endif; ?

?php wp_reset_query(); ?

Topic post-duplication Wordpress

Category Web


You can gather the post id(s) from the first loop in an array and then use post__not_in arg in the second loop.

$exclude = array();
if ( have_posts() ) : while ( have_posts() ) : the_post();
//first loop
$exclude[] = get_the_ID();
...


//second loop
$second_loop_args = array(
    'showposts' => 3,
    'post_type' => 'post',
    'category_name' => 'Personal', //should make sure you're using category slug here
    'post__not_in' => $exclude //this arg needs to be an array, hence moving from string to array format for query_post args
);
query_posts($second_loop_args);
....

**I will say though, that you should reconsider using new WP_Query() for your loops instead of query_posts as detailed here: https://codex.wordpress.org/Class_Reference/WP_Query

It's basicaly the same, but instead of using query_posts, you just assign a variable your new WP_Query class and loop through it.

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.