Make WordPress Core


Ignore:
Timestamp:
02/22/2016 10:16:37 PM (10 years ago)
Author:
boonebgorges
Message:

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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/term/getTerms.php

    r36485 r36614  
    1010                _clean_term_filters();
    1111                wp_cache_delete( 'last_changed', 'terms' );
     12        }
     13
     14        /**
     15         * @ticket 35495
     16         */
     17        public function test_should_accept_an_args_array_containing_taxonomy_for_first_parameter() {
     18                register_taxonomy( 'wptests_tax', 'post' );
     19                $term = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax' ) );
     20
     21                $found = get_terms( array(
     22                        'taxonomy' => 'wptests_tax',
     23                        'hide_empty' => false,
     24                        'fields' => 'ids',
     25                        'update_term_meta_cache' => false,
     26                ) );
     27
     28                $this->assertEqualSets( array( $term ), $found );
     29        }
     30
     31        /**
     32         * @ticket 35495
     33         */
     34        public function test_excluding_taxonomy_arg_should_return_terms_from_all_taxonomies() {
     35                register_taxonomy( 'wptests_tax1', 'post' );
     36                register_taxonomy( 'wptests_tax2', 'post' );
     37                $t1 = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax1' ) );
     38                $t2 = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax2' ) );
     39
     40                $found = get_terms( array(
     41                        'hide_empty' => false,
     42                        'fields' => 'ids',
     43                        'update_term_meta_cache' => false,
     44                ) );
     45
     46                // There may be other terms lying around, so don't do an exact match.
     47                $this->assertContains( $t1, $found );
     48                $this->assertContains( $t2, $found );
    1249        }
    1350
Note: See TracChangeset for help on using the changeset viewer.