WordPress.org

Make WordPress Core


Ignore:
Timestamp:
02/22/2016 10:16:37 PM (4 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.