Fix setup_postdata()
to set the (inside the loop) globals before the_post
action is fired. Follow-up from #42814 and [44941].
Props david.binda, spacedmonkey, boonebgorges, birgire, jorbin, azaozz. Fixes #47114 for trunk. git-svn-id: https://develop.svn.wordpress.org/trunk@45285 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
e1bb084bfc
commit
96649a5ad1
@ -4208,6 +4208,17 @@ class WP_Query {
|
|||||||
$more = $elements['more'];
|
$more = $elements['more'];
|
||||||
$numpages = $elements['numpages'];
|
$numpages = $elements['numpages'];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fires once the post data has been setup.
|
||||||
|
*
|
||||||
|
* @since 2.8.0
|
||||||
|
* @since 4.1.0 Introduced `$this` parameter.
|
||||||
|
*
|
||||||
|
* @param WP_Post $post The Post object (passed by reference).
|
||||||
|
* @param WP_Query $this The current Query object (passed by reference).
|
||||||
|
*/
|
||||||
|
do_action_ref_array( 'the_post', array( &$post, &$this ) );
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4298,17 +4309,6 @@ class WP_Query {
|
|||||||
$multipage = 0;
|
$multipage = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Fires once the post data has been setup.
|
|
||||||
*
|
|
||||||
* @since 2.8.0
|
|
||||||
* @since 4.1.0 Introduced `$this` parameter.
|
|
||||||
*
|
|
||||||
* @param WP_Post $post The Post object (passed by reference).
|
|
||||||
* @param WP_Query $this The current Query object (passed by reference).
|
|
||||||
*/
|
|
||||||
do_action_ref_array( 'the_post', array( &$post, &$this ) );
|
|
||||||
|
|
||||||
$elements = compact( 'id', 'authordata', 'currentday', 'currentmonth', 'page', 'pages', 'multipage', 'more', 'numpages' );
|
$elements = compact( 'id', 'authordata', 'currentday', 'currentmonth', 'page', 'pages', 'multipage', 'more', 'numpages' );
|
||||||
|
|
||||||
return $elements;
|
return $elements;
|
||||||
|
@ -9,6 +9,8 @@ class Tests_Query_SetupPostdata extends WP_UnitTestCase {
|
|||||||
|
|
||||||
protected $global_data = array();
|
protected $global_data = array();
|
||||||
|
|
||||||
|
protected $pages_global;
|
||||||
|
|
||||||
public function setUp() {
|
public function setUp() {
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
return;
|
return;
|
||||||
@ -416,4 +418,24 @@ class Tests_Query_SetupPostdata extends WP_UnitTestCase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ticket 47114
|
||||||
|
*
|
||||||
|
* setup_postdata() should set the globals before `the_post` action is fired.
|
||||||
|
*/
|
||||||
|
public function test_the_post_action() {
|
||||||
|
$post = self::factory()->post->create_and_get();
|
||||||
|
add_action( 'the_post', array( $this, 'the_post_action_callback' ) );
|
||||||
|
|
||||||
|
setup_postdata( $post );
|
||||||
|
|
||||||
|
$this->assertEquals( $GLOBALS['pages'], $this->pages_global );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helpers
|
||||||
|
*/
|
||||||
|
public function the_post_action_callback() {
|
||||||
|
$this->pages_global = $GLOBALS['pages'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user