Allow get_terms() to fetch terms regardless of taxonomy.

`get_terms()` has historically required that a taxonomy be specified when
querying terms. This requirement is related to the fact that terms could
formerly be shared between taxonomies, making `$taxonomies` critical for
disambiguation. Since terms can no longer be shared as of 4.4, it'
s desirable to be able to query for terms regardless of what taxonomy they're in.

Because it's now optional to pass taxonomies, it's no longer necessary to have
`$taxonomies` as the first (and required) parameter for `get_terms()`. The new
function signature is `get_terms( $args )`, where 'taxonomy' can (optionally) be
passed as part of the `$args` array. This syntax is more consistent with
functions like `get_users()` and `get_posts()`.

We've maintained backward compatibility by always giving precedence to the old
argument format. If a second parameter is detected, or if it's detected that
the first parameter is a list of taxonomy names rather than an `$args` array,
`get_terms()` will parse the function arguments in the legacy fashion.

Props flixos90, swissspidy, DrewAPicture, boonebgorges.
Fixes #35495.

git-svn-id: https://develop.svn.wordpress.org/trunk@36614 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Boone Gorges
2016-02-22 22:16:37 +00:00
parent 572578b8f1
commit 408fb37f2b
2 changed files with 98 additions and 18 deletions
+37
View File
@@ -11,6 +11,43 @@ class Tests_Term_getTerms extends WP_UnitTestCase {
wp_cache_delete( 'last_changed', 'terms' );
}
/**
* @ticket 35495
*/
public function test_should_accept_an_args_array_containing_taxonomy_for_first_parameter() {
register_taxonomy( 'wptests_tax', 'post' );
$term = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax' ) );
$found = get_terms( array(
'taxonomy' => 'wptests_tax',
'hide_empty' => false,
'fields' => 'ids',
'update_term_meta_cache' => false,
) );
$this->assertEqualSets( array( $term ), $found );
}
/**
* @ticket 35495
*/
public function test_excluding_taxonomy_arg_should_return_terms_from_all_taxonomies() {
register_taxonomy( 'wptests_tax1', 'post' );
register_taxonomy( 'wptests_tax2', 'post' );
$t1 = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax1' ) );
$t2 = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax2' ) );
$found = get_terms( array(
'hide_empty' => false,
'fields' => 'ids',
'update_term_meta_cache' => false,
) );
// There may be other terms lying around, so don't do an exact match.
$this->assertContains( $t1, $found );
$this->assertContains( $t2, $found );
}
/**
* @ticket 23326
*/