web-dev-qa-db-fra.com

Meilleur moyen d'éviter la duplication après l'utilisation de plusieurs boucles

J'ai les boucles suivantes sur une page de mon site Web.

Quel est le meilleur moyen d’adapter le code ci-dessous pour arrêter la publication dans ma première boucle, puis de la répéter dans la seconde?

    <?php query_posts('showposts=1&post_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: ?>

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

<?php wp_reset_query(); ?>


<div id="postlist">

<h2>Personal finances</h2>

<?php query_posts('showposts=3&post_type=post&category_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(); ?>
1
C-M

Vous pouvez rassembler le ou les identifiants de publication de la première boucle d'un tableau, puis utiliser post__not_in arg dans la deuxième boucle.

$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);
....

** Je dirai cependant que vous devriez reconsidérer l'utilisation de WP_Query () pour vos boucles au lieu de query_posts comme détaillé ici: https://codex.wordpress.org/Class_Reference/WP_Query

C'est fondamentalement la même chose, mais au lieu d'utiliser query_posts, vous assignez simplement une variable à votre nouvelle classe WP_Query et vous la passez en boucle.

0
danbrellis