diff --git a/src/wp-includes/taxonomy.php b/src/wp-includes/taxonomy.php index e910e33cc5..82d16ae1e2 100644 --- a/src/wp-includes/taxonomy.php +++ b/src/wp-includes/taxonomy.php @@ -1183,15 +1183,19 @@ function get_terms( $args = array(), $deprecated = '' ) { * (a) a second non-empty parameter is passed, or * (b) the first parameter shares no keys with the default array (ie, it's a list of taxonomies) */ - $key_intersect = array_intersect_key( $term_query->query_var_defaults, (array) $args ); + $_args = wp_parse_args( $args ); + $key_intersect = array_intersect_key( $term_query->query_var_defaults, (array) $_args ); $do_legacy_args = $deprecated || empty( $key_intersect ); if ( $do_legacy_args ) { $taxonomies = (array) $args; - $args = $deprecated; + $args = wp_parse_args( $deprecated ); $args['taxonomy'] = $taxonomies; - } elseif ( isset( $args['taxonomy'] ) && null !== $args['taxonomy'] ) { - $args['taxonomy'] = (array) $args['taxonomy']; + } else { + $args = wp_parse_args( $args ); + if ( isset( $args['taxonomy'] ) && null !== $args['taxonomy'] ) { + $args['taxonomy'] = (array) $args['taxonomy']; + } } $empty_array = array(); diff --git a/tests/phpunit/tests/term/getTerms.php b/tests/phpunit/tests/term/getTerms.php index 47e199be48..891c5365eb 100644 --- a/tests/phpunit/tests/term/getTerms.php +++ b/tests/phpunit/tests/term/getTerms.php @@ -28,6 +28,32 @@ class Tests_Term_getTerms extends WP_UnitTestCase { $this->assertEqualSets( array( $term ), $found ); } + /** + * @ticket 35495 + * @ticket 35381 + */ + public function test_legacy_params_as_query_string_should_be_properly_parsed() { + register_taxonomy( 'wptests_tax', 'post' ); + $term = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax' ) ); + + $found = get_terms( 'wptests_tax', 'hide_empty=0&fields=ids&update_term_meta_cache=0' ); + + $this->assertEqualSets( array( $term ), $found ); + } + + /** + * @ticket 35495 + * @ticket 35381 + */ + public function test_new_params_as_query_string_should_be_properly_parsed() { + register_taxonomy( 'wptests_tax', 'post' ); + $term = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax' ) ); + + $found = get_terms( 'taxonomy=wptests_tax&hide_empty=0&fields=ids&update_term_meta_cache=0' ); + + $this->assertEqualSets( array( $term ), $found ); + } + /** * @ticket 35495 */