5

The incomplete Codex about this, says very simply:

rewind_posts():
Rewind the loop posts.

As per this WPSE thread, with Eugene Manuilov's answer, I got:

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

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

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

With Ian Stewart's theme development tutorial, I found rewind_posts()'s use in 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; ?>

But in TwentyThirteen theme we can't see something like this, but a simple WordPress loop with conditional:

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

So, I just want to know, while I have the WordPress loop to use, and that works with pagination also, then where do I need to REWIND THE LOOP, and why?

EDIT

Ok, after the first answer, I got a very good article describing the 3 Query-reset functions in WordPress:

» 3 Ways to Reset the WordPress Loop by Jeff Starr - DigWP.com

I hope with this the answer can be a lot more educative than currently what we got.

1
  • 1
    Please summon the digwp article in your own answer. I really hoped for a much more interesting and educational answer than what we got so far.
    – kaiser
    Commented Oct 24, 2013 at 4:15

2 Answers 2

5

It generally the clears the current loop

// 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; ?>

Here it clears the main loop and start with the new loop

Reference: http://codex.wordpress.org/Function_Reference/rewind_posts

3
  • 3
    Some notes: It's not necessary to open and close PHP tags on every line. You might also want to close the if/endif at the end. Else you'd trigger the second loop no matter if there're posts or not. Last: Please use the WYSIWYG editor to format your contents.
    – kaiser
    Commented Oct 23, 2013 at 17:43
  • Ok. Marked this one as accepted because I found this digwp post helpful with the help of this answer. Thanks. Commented Oct 23, 2013 at 18:24
  • Bold caption gave me an instant understanding. Good answer! Commented Oct 22, 2019 at 9:03
1

It is actually not necessary if you use have_posts() in the loop since it is called at the end of the loop in said function:

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
  • I was looking at the same function and definitely does not seem necessary. I wonder if and old WordPress did not rewind? All of their documentation seems to always showing rewind... Commented Jun 26, 2018 at 0:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.