`WP_Query` taxonomy query vars should be set to first of multiple taxonomies.

This provides better parity with `get_queried_object()`, which will return the
first taxonomy/term matched by the current query.

[29891] introduced the abnormal behavior for the 'taxonomy' and 'term'
query vars.

Props Chouby.
Fixes #35619.

git-svn-id: https://develop.svn.wordpress.org/trunk@36484 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Boone Gorges 2016-02-06 03:57:33 +00:00
parent b4779f7368
commit 0673904ddf
2 changed files with 43 additions and 0 deletions

View File

@ -2857,6 +2857,9 @@ class WP_Query {
} else {
$q['term_id'] = $queried_items['terms'][0];
}
// Take the first one we find.
break;
}
}
}

View File

@ -522,4 +522,44 @@ class Tests_Query extends WP_UnitTestCase {
$this->assertSame( array( $p2 ), $q->posts );
}
/**
* @ticket 35619
*/
public function test_get_queried_object_should_return_first_of_multiple_terms() {
register_taxonomy( 'tax1', 'post' );
register_taxonomy( 'tax2', 'post' );
$term1 = $this->factory->term->create( array( 'taxonomy' => 'tax1', 'name' => 'term1' ) );
$term2 = $this->factory->term->create( array( 'taxonomy' => 'tax2', 'name' => 'term2' ) );
$post_id = $this->factory->post->create();
wp_set_object_terms( $post_id, 'term1', 'tax1' );
wp_set_object_terms( $post_id, 'term2', 'tax2' );
$this->go_to( home_url( '?tax1=term1&tax2=term2' ) );
$queried_object = get_queried_object();
$this->assertSame( 'tax1', $queried_object->taxonomy );
$this->assertSame( 'term1', $queried_object->slug );
}
/**
* @ticket 35619
*/
public function test_query_vars_should_match_first_of_multiple_terms() {
register_taxonomy( 'tax1', 'post' );
register_taxonomy( 'tax2', 'post' );
$term1 = $this->factory->term->create( array( 'taxonomy' => 'tax1', 'name' => 'term1' ) );
$term2 = $this->factory->term->create( array( 'taxonomy' => 'tax2', 'name' => 'term2' ) );
$post_id = $this->factory->post->create();
wp_set_object_terms( $post_id, 'term1', 'tax1' );
wp_set_object_terms( $post_id, 'term2', 'tax2' );
$this->go_to( home_url( '?tax1=term1&tax2=term2' ) );
$queried_object = get_queried_object();
$this->assertSame( 'tax1', get_query_var( 'taxonomy' ) );
$this->assertSame( 'term1', get_query_var( 'term' ) );
}
}