Uses
Uses | Description |
---|---|
wp-includes/class-wp-query.php: WP_Query::reset_postdata() | After looping through a nested query, this function restores the $post global to the current post in this query. |
After looping through a separate query, this function restores the $post global to the current post in the main query.
Use this function to restore the context of the template tags from a secondary query loop back to the main query loop.
Differences between the main query loop and secondary query loops are:
A secondary query loop using $sec_query = new WP_Query()
and $sec_query->the_post()
affects the global $post
variable. The global $post
variable is used by template tags by default. wp_reset_postdata()
restores the global $post
variable to the current post in the main query (contained in the global $wp_query
variable as opposed to the $sec_query
variable), so that the template tags refer to the main query loop by default again.
Example
<?php $args = array( 'posts_per_page' => 3 ); // the query $sec_query = new WP_Query( $args ); ?> <?php if ( $sec_query->have_posts() ) : ?> <!-- start of the loop. the_post() sets the global $post variable --> <?php while ( $sec_query->have_posts() ) : $sec_query->the_post(); ?> <!-- template tags will return values from the post in the $sec_query object <?php the_title(); ?> <?php the_excerpt(); ?> <?php endwhile; ?><!-- end of the loop --> <!-- reset global post variable. After this point, we are back to the Main Query object --> <?php wp_reset_postdata(); ?> <?php else: ?> <?php _e( 'Sorry, no posts matched your criteria.' ); ?> <?php endif; ?>
File: wp-includes/query.php
function wp_reset_postdata() { global $wp_query; if ( isset( $wp_query ) ) { $wp_query->reset_postdata(); } }
Version | Description |
---|---|
3.0.0 | Introduced. |
© 2003–2019 WordPress Foundation
Licensed under the GNU GPLv2+ License.
https://developer.wordpress.org/reference/functions/wp_reset_postdata