web-dev-qa-db-fra.com

rewind_posts () - quelle utilisation en fait-il et où utiliser est requis ou préféré?

Le incomplet Codex à ce sujet , dit très simplement:

rewind_posts ():
Rembobinez les messages de la boucle.

Selon ce fil WPSE , avec Eugene Manuilov la réponse de, j'ai eu:

<?php
// fetch first post from the loop
the_post();

// get post type
$post_type = get_post_type(); 

// rewind the loop posts
rewind_posts();
?>

Avec le tutoriel de développement de thèmes d'Ian Stewart, j'ai trouvé l'utilisation de rewind_posts() dans archive.php, category.php, tag.php, author.php:

<?php the_post(); ?>
<!-- echo page title -->
<?php rewind_posts(); ?>
<?php while ( have_posts() ) : the_post(); ?>
   <!-- echo content -->
<?php endwhile; ?>

Mais dans le thème TwentyThirteen nous ne pouvons pas voir quelque chose comme ça, mais une simple boucle WordPress avec conditionnel:

<?php if ( have_posts() ) : ?>
<!-- echo page title -->
<?php while ( have_posts() ) : the_post(); ?>
   <!-- echo content -->
<?php endwhile; ?>
<?php endif; ?>

Donc, je veux juste savoir, alors que j'ai la boucle WordPress à utiliser, et que ça marche aussi avec la pagination, alorsdois-je avoir besoin de rembobiner la boucle et pourquoi ?

MODIFIER

Ok, après la première réponse, j'ai eu un très bon article décrivant les 3 fonctions de réinitialisation de requête de WordPress:

"3 façons de réinitialiser la boucle WordPresspar Jeff Starr - DigWP.com

J'espère qu'avec cela la réponse peut être beaucoup plus éducative qu'actuellement ce que nous avons eu.

4
Mayeenul Islam

Il efface généralement la boucle de courant

// main loop
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php the_content(); ?>
<?php endwhile; endif; ?>

// rewind
<?php rewind_posts(); ?>

// new loop
<?php while (have_posts()) : the_post(); ?>
<?php the_content(); ?>
<?php endwhile; ?>

Ici, il efface la boucle principale et commence par la nouvelle boucle

Référence: http://codex.wordpress.org/Function_Reference/rewind_posts

4
Kishore Sahoo

C'est en fait pas nécessaire si vous utilisez have_posts() dans la boucle car elle est appelée à la fin de la boucle dans ladite fonction:

public function have_posts() {
    if ( $this->current_post + 1 < $this->post_count ) {
        return true;
    } elseif ( $this->current_post + 1 == $this->post_count && $this->post_count > 0 ) {
        /**
         * Fires once the loop has ended.
         *
         * @since 2.0.0
         *
         * @param WP_Query &$this The WP_Query instance (passed by reference).
         */
        do_action_ref_array( 'loop_end', array( &$this ) );
        // Do some cleaning up after the loop
        $this->rewind_posts();
    }

    $this->in_the_loop = false;
    return false;
}
1
brannigan