Introduce a reset_postdata() method on the WP_Query object, which wp_reset_postdata() now wraps.
props ericlewis. fixes #24785. git-svn-id: https://develop.svn.wordpress.org/trunk@25601 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
621f86abfb
commit
13408ddcbd
@ -108,17 +108,14 @@ function wp_reset_query() {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* After looping through a separate query, this function restores
|
* After looping through a separate query, this function restores
|
||||||
* the $post global to the current post in the main query
|
* the $post global to the current post in the main query.
|
||||||
*
|
*
|
||||||
* @since 3.0.0
|
* @since 3.0.0
|
||||||
* @uses $wp_query
|
* @uses $wp_query
|
||||||
*/
|
*/
|
||||||
function wp_reset_postdata() {
|
function wp_reset_postdata() {
|
||||||
global $wp_query;
|
global $wp_query;
|
||||||
if ( !empty($wp_query->post) ) {
|
$wp_query->reset_postdata();
|
||||||
$GLOBALS['post'] = $wp_query->post;
|
|
||||||
setup_postdata($wp_query->post);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -3628,6 +3625,21 @@ class WP_Query {
|
|||||||
global $wp_the_query;
|
global $wp_the_query;
|
||||||
return $wp_the_query === $this;
|
return $wp_the_query === $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* After looping through a nested query, this function
|
||||||
|
* restores the $post global to the current post in this query.
|
||||||
|
*
|
||||||
|
* @since 3.7.0
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function reset_postdata() {
|
||||||
|
if ( ! empty( $this->post ) ) {
|
||||||
|
$GLOBALS['post'] = $this->post;
|
||||||
|
setup_postdata( $this->post );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -57,4 +57,25 @@ class Tests_Query extends WP_UnitTestCase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ticket 24785
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function test_nested_loop_reset_postdata() {
|
||||||
|
$post_id = $this->factory->post->create();
|
||||||
|
$nested_post_id = $this->factory->post->create();
|
||||||
|
|
||||||
|
$first_query = new WP_Query( array( 'post__in' => array( $post_id ) ) );
|
||||||
|
while ( $first_query->have_posts() ) { $first_query->the_post();
|
||||||
|
$second_query = new WP_Query( array( 'post__in' => array( $nested_post_id ) ) );
|
||||||
|
while ( $second_query->have_posts() ) {
|
||||||
|
$second_query->the_post();
|
||||||
|
$this->assertEquals( get_the_ID(), $nested_post_id );
|
||||||
|
}
|
||||||
|
$first_query->reset_postdata();
|
||||||
|
$this->assertEquals( get_the_ID(), $post_id );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user