What is difference between WordPress functions rewind_posts()
, wp_reset_postdata()
and wp_reset_query()
and when I should use them?
If I have this part of code in single.php
:
$query = new WP_Query($some_args);
while ($query->have_posts()) : $query->the_post();
...
endwhile;
is this equal to this:
$query = new WP_Query($some_args);
while (have_posts()) : the_post();
...
endwhile;
The two statements in your question aren't equal.
In the first block you're looping through posts returned by your custom WP_Query, $query
.
In the second block $query
doesn't do anything and the posts are actually from the global $wp_query
.
Let's look at what each of the three functions you mentioned do.
rewind_posts()
- This does exactly what it sounds like. After you've run a loop this function is used to return to the beginning allowing you to run the same loop again.
wp_reset_postdata()
- In your first block of code you run a custom WP_Query. This will modify the global $post
variable. After that query has been run using wp_reset_postdata()
will restore the global $post
variable back to the first post in the main query.
wp_reset_query()
- This should be used if you change the global $wp_query
or use query_posts()
(I wouldn't suggest using query_posts()
). It resets $wp_query
back to the original.
Further reading:
http://codex.wordpress.org/Function_Reference/rewind_posts http://codex.wordpress.org/Function_Reference/wp_reset_postdata http://codex.wordpress.org/Function_Reference/wp_reset_query
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With