Make WordPress Core

Changeset 33095


Ignore:
Timestamp:
07/06/2015 08:36:18 PM (11 years ago)
Author:
boonebgorges
Message:

In WP_Query::parse_tax_query(), allow taxonomy querystring to be formatted as an array.

Props Veraxus.
Fixes #32454.

Location:
trunk
Files:
2 edited

Legend:

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

    r32620 r33095  
    18681868                                $term = $q[$t->query_var];
    18691869
     1870                                if ( is_array( $term ) ) {
     1871                                        $term = implode( ',', $term );
     1872                                }
     1873
    18701874                                if ( strpos($term, '+') !== false ) {
    18711875                                        $terms = preg_split( '/[+]+/', $term );
  • trunk/tests/phpunit/tests/query.php

    r31662 r33095  
    134134                $this->assertContains( "ORDER BY $wpdb->posts.post_title DESC, $wpdb->posts.post_date DESC", $q->request );
    135135        }
     136
     137        public function test_custom_taxonomy_querystring_single_term() {
     138                register_taxonomy( 'test_tax_cat', 'post' );
     139
     140                wp_insert_term( 'test1', 'test_tax_cat' );
     141                wp_insert_term( 'test2', 'test_tax_cat' );
     142                wp_insert_term( 'test3', 'test_tax_cat' );
     143
     144                $p1 = $this->factory->post->create();
     145                $p2 = $this->factory->post->create();
     146                $p3 = $this->factory->post->create();
     147
     148                wp_set_object_terms( $p1, 'test1', 'test_tax_cat' );
     149                wp_set_object_terms( $p2, array( 'test1', 'test2' ), 'test_tax_cat' );
     150                wp_set_object_terms( $p3, 'test2', 'test_tax_cat' );
     151
     152                $url = add_query_arg( array(
     153                        'test_tax_cat' => 'test1',
     154                ), '/' );
     155
     156                $this->go_to( $url );
     157
     158                $this->assertEquals( array( $p1, $p2 ), wp_list_pluck( $GLOBALS['wp_query']->posts, 'ID' ) );
     159        }
     160
     161        public function test_custom_taxonomy_querystring_multiple_terms_comma_separated() {
     162                register_taxonomy( 'test_tax_cat', 'post' );
     163
     164                wp_insert_term( 'test1', 'test_tax_cat' );
     165                wp_insert_term( 'test2', 'test_tax_cat' );
     166                wp_insert_term( 'test3', 'test_tax_cat' );
     167
     168                $p1 = $this->factory->post->create();
     169                $p2 = $this->factory->post->create();
     170                $p3 = $this->factory->post->create();
     171                $p4 = $this->factory->post->create();
     172
     173                wp_set_object_terms( $p1, 'test1', 'test_tax_cat' );
     174                wp_set_object_terms( $p2, array( 'test1', 'test2' ), 'test_tax_cat' );
     175                wp_set_object_terms( $p3, 'test2', 'test_tax_cat' );
     176                wp_set_object_terms( $p4, "test3", 'test_tax_cat' );
     177
     178                $url = add_query_arg( array(
     179                        'test_tax_cat' => 'test1,test2',
     180                ), '/' );
     181
     182                $this->go_to( $url );
     183
     184                $this->assertEquals( array( $p1, $p2, $p3 ), wp_list_pluck( $GLOBALS['wp_query']->posts, 'ID' ) );
     185        }
     186
     187        /**
     188         * @ticket 32454
     189         */
     190        public function test_custom_taxonomy_querystring_multiple_terms_formatted_as_array() {
     191                register_taxonomy( 'test_tax_cat', 'post' );
     192
     193                wp_insert_term( 'test1', 'test_tax_cat' );
     194                wp_insert_term( 'test2', 'test_tax_cat' );
     195                wp_insert_term( 'test3', 'test_tax_cat' );
     196
     197                $p1 = $this->factory->post->create();
     198                $p2 = $this->factory->post->create();
     199                $p3 = $this->factory->post->create();
     200                $p4 = $this->factory->post->create();
     201
     202                wp_set_object_terms( $p1, 'test1', 'test_tax_cat' );
     203                wp_set_object_terms( $p2, array( 'test1', 'test2' ), 'test_tax_cat' );
     204                wp_set_object_terms( $p3, 'test2', 'test_tax_cat' );
     205                wp_set_object_terms( $p4, "test3", 'test_tax_cat' );
     206
     207                $url = add_query_arg( array(
     208                        'test_tax_cat' => array( 'test1', 'test2' ),
     209                ), '/' );
     210
     211                $this->go_to( $url );
     212
     213                $this->assertEquals( array( $p1, $p2, $p3 ), wp_list_pluck( $GLOBALS['wp_query']->posts, 'ID' ) );
     214        }
    136215}
Note: See TracChangeset for help on using the changeset viewer.