Better default values in WP_Query::get_queried_object()
.
Setting the default value of the `queried_object_id` property to `0` meant that, when called early enough in the WP bootstrap, `get_queried_object()` could short-circuit the normal query by fooling it into thinking that the request was for a page with id 0. Setting the default value to `null` instead avoids this problem. Props gradyetc, jazbek. Fixes #31355. git-svn-id: https://develop.svn.wordpress.org/trunk@34073 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
3cbec930bb
commit
b7c8dbf4a2
@ -3926,7 +3926,7 @@ class WP_Query {
|
|||||||
return $this->queried_object;
|
return $this->queried_object;
|
||||||
|
|
||||||
$this->queried_object = null;
|
$this->queried_object = null;
|
||||||
$this->queried_object_id = 0;
|
$this->queried_object_id = null;
|
||||||
|
|
||||||
if ( $this->is_category || $this->is_tag || $this->is_tax ) {
|
if ( $this->is_category || $this->is_tag || $this->is_tax ) {
|
||||||
if ( $this->is_category ) {
|
if ( $this->is_category ) {
|
||||||
|
@ -417,4 +417,46 @@ class Tests_Query extends WP_UnitTestCase {
|
|||||||
|
|
||||||
$this->assertEqualSets( array( $p1, $p2, $p3 ), wp_list_pluck( $GLOBALS['wp_query']->posts, 'ID' ) );
|
$this->assertEqualSets( array( $p1, $p2, $p3 ), wp_list_pluck( $GLOBALS['wp_query']->posts, 'ID' ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ticket 31355
|
||||||
|
*/
|
||||||
|
public function test_pages_dont_404_when_queried_post_id_is_modified() {
|
||||||
|
$post_id = $this->factory->post->create( array( 'post_title' => 'A Test Page', 'post_type' => 'page' ) );
|
||||||
|
|
||||||
|
add_action( 'parse_query', array( $this, 'filter_parse_query_to_modify_queried_post_id' ) );
|
||||||
|
|
||||||
|
$url = get_permalink( $post_id );
|
||||||
|
$this->go_to( $url );
|
||||||
|
|
||||||
|
remove_action( 'parse_query', array( $this, 'filter_parse_query_to_modify_queried_post_id' ) );
|
||||||
|
|
||||||
|
$this->assertFalse( $GLOBALS['wp_query']->is_404() );
|
||||||
|
$this->assertEquals( $post_id, $GLOBALS['wp_query']->post->ID );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ticket 31355
|
||||||
|
*/
|
||||||
|
public function test_custom_hierarchical_post_types_404_when_queried_post_id_is_modified() {
|
||||||
|
global $wp_rewrite;
|
||||||
|
|
||||||
|
register_post_type( 'guide', array( 'name' => 'Guide', 'public' => true, 'hierarchical' => true ) );
|
||||||
|
$wp_rewrite->flush_rules();
|
||||||
|
$post_id = $this->factory->post->create( array( 'post_title' => 'A Test Guide', 'post_type' => 'guide' ) );
|
||||||
|
|
||||||
|
add_action( 'parse_query', array( $this, 'filter_parse_query_to_modify_queried_post_id' ) );
|
||||||
|
|
||||||
|
$url = get_permalink( $post_id );
|
||||||
|
$this->go_to( $url );
|
||||||
|
|
||||||
|
remove_action( 'parse_query', array( $this, 'filter_parse_query_to_modify_queried_post_id' ) );
|
||||||
|
|
||||||
|
$this->assertFalse( $GLOBALS['wp_query']->is_404() );
|
||||||
|
$this->assertEquals( $post_id, $GLOBALS['wp_query']->post->ID );
|
||||||
|
}
|
||||||
|
|
||||||
|
public function filter_parse_query_to_modify_queried_post_id( $query ) {
|
||||||
|
$post = get_queried_object();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user