Make WordPress Core

Changeset 37599


Ignore:
Timestamp:
05/31/2016 12:53:27 PM (10 years ago)
Author:
boonebgorges
Message:

Ensure that get_terms() can accept querystring-style arguments.

Prior to [37572], arguments passed to get_terms() were passed immediately
through wp_parse_args(), which made it possible to pass arguments as a
querystring (hide_empty=0) rather than an array
(array( 'hide_empty' => false )). [37572] moved default argument parsing
into WP_Term_Query, while assuming that arguments passed to get_terms()
would be formatted as an array.

To provide compatibility, we now parse all args passed to get_terms() into
an array before processing.

See #35381.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/taxonomy.php

    r37593 r37599  
    11841184         * (b) the first parameter shares no keys with the default array (ie, it's a list of taxonomies)
    11851185         */
    1186         $key_intersect  = array_intersect_key( $term_query->query_var_defaults, (array) $args );
     1186        $_args = wp_parse_args( $args );
     1187        $key_intersect  = array_intersect_key( $term_query->query_var_defaults, (array) $_args );
    11871188        $do_legacy_args = $deprecated || empty( $key_intersect );
    11881189
    11891190        if ( $do_legacy_args ) {
    11901191                $taxonomies = (array) $args;
    1191                 $args = $deprecated;
     1192                $args = wp_parse_args( $deprecated );
    11921193                $args['taxonomy'] = $taxonomies;
    1193         } elseif ( isset( $args['taxonomy'] ) && null !== $args['taxonomy'] ) {
    1194                 $args['taxonomy'] = (array) $args['taxonomy'];
     1194        } else {
     1195                $args = wp_parse_args( $args );
     1196                if ( isset( $args['taxonomy'] ) && null !== $args['taxonomy'] ) {
     1197                        $args['taxonomy'] = (array) $args['taxonomy'];
     1198                }
    11951199        }
    11961200
  • trunk/tests/phpunit/tests/term/getTerms.php

    r37519 r37599  
    2525                        'update_term_meta_cache' => false,
    2626                ) );
     27
     28                $this->assertEqualSets( array( $term ), $found );
     29        }
     30
     31        /**
     32         * @ticket 35495
     33         * @ticket 35381
     34         */
     35        public function test_legacy_params_as_query_string_should_be_properly_parsed() {
     36                register_taxonomy( 'wptests_tax', 'post' );
     37                $term = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax' ) );
     38
     39                $found = get_terms( 'wptests_tax', 'hide_empty=0&fields=ids&update_term_meta_cache=0' );
     40
     41                $this->assertEqualSets( array( $term ), $found );
     42        }
     43
     44        /**
     45         * @ticket 35495
     46         * @ticket 35381
     47         */
     48        public function test_new_params_as_query_string_should_be_properly_parsed() {
     49                register_taxonomy( 'wptests_tax', 'post' );
     50                $term = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax' ) );
     51
     52                $found = get_terms( 'taxonomy=wptests_tax&hide_empty=0&fields=ids&update_term_meta_cache=0' );
    2753
    2854                $this->assertEqualSets( array( $term ), $found );
Note: See TracChangeset for help on using the changeset viewer.