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, alors où dois-je avoir besoin de rembobiner la boucle et pourquoi ?
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.
// 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
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;
}