WordPress.org

Make WordPress Core

Ticket #28099: 28099.2.diff

File 28099.2.diff, 3.5 KB (added by wonderboymusic, 8 years ago)
  • src/wp-includes/query.php

     
    18291829                                'field' => 'term_id',
    18301830                                'include_children' => false
    18311831                        );
     1832                } elseif ( isset( $this->query['category__in'] ) ) {
     1833                        $q['category__in'] = false;
    18321834                }
    18331835
    18341836                if ( ! empty($q['category__not_in']) ) {
     
    18861888                                'taxonomy' => 'post_tag',
    18871889                                'terms' => $q['tag__in']
    18881890                        );
     1891                } elseif ( isset( $this->query['tag__in'] ) ) {
     1892                        $q['tag__in'] = false;
    18891893                }
    18901894
    18911895                if ( !empty($q['tag__not_in']) ) {
     
    19131917                                'terms' => $q['tag_slug__in'],
    19141918                                'field' => 'slug'
    19151919                        );
     1920                } elseif ( isset( $this->query['tag_slug__in'] ) ) {
     1921                        $q['tag_slug__in'] = false;
    19161922                }
    19171923
    19181924                if ( !empty($q['tag_slug__and']) ) {
     
    25002506                        $where .= $clauses['where'];
    25012507                }
    25022508
     2509                // If *__in is passed to WP_Query as an empty array, don't return results
     2510                foreach ( array( 'category', 'tag', 'tag_slug' ) as $in ) {
     2511                        if ( isset( $q["{$in}__in"] ) && false === $q["{$in}__in"] ) {
     2512                                $where = " AND 1=0 $where";
     2513                        }
     2514                }
     2515
    25032516                if ( $this->is_tax ) {
    25042517                        if ( empty($post_type) ) {
    25052518                                // Do a fully inclusive search for currently registered post types of queried taxonomies
     
    25912604                } elseif ( ! empty( $q['author__in'] ) ) {
    25922605                        $author__in = implode( ',', array_map( 'absint', array_unique( (array) $q['author__in'] ) ) );
    25932606                        $where .= " AND {$wpdb->posts}.post_author IN ($author__in) ";
     2607                } elseif ( isset( $this->query['author__in'] ) ) {
     2608                        $author__in = 0;
     2609                        $where .= ' AND 1=0 ';
    25942610                }
    25952611
    25962612                // Author stuff for nice URLs
  • tests/phpunit/tests/query/results.php

     
    513513                $author_ids = array_unique( wp_list_pluck( $posts, 'post_author' ) );
    514514                $this->assertEqualSets( array( $author_1, $author_2 ), $author_ids );
    515515
     516                $posts = $this->q->query( array( 'author__in' => array() ) );
     517                $this->assertEmpty( $posts );
     518
    516519                $posts = $this->q->query( array(
    517520                        'author__not_in' => array( $author_1, $author_2 ),
    518521                        'post__in' => array( $post_1, $post_2, $post_3, $post_4 )
  • tests/phpunit/tests/term/query.php

     
    202202
    203203                $this->assertEquals( array( $posts[0], $posts[3] ), $results2, 'Relation: AND; Operator: IN' );
    204204        }
     205
     206        function test_empty__in() {
     207                $cat_id = $this->factory->category->create();
     208                $post_id = $this->factory->post->create();
     209                wp_set_post_categories( $post_id, $cat_id );
     210
     211                $q1 = get_posts( array( 'category__in' => array( $cat_id ) ) );
     212                $this->assertNotEmpty( $q1 );
     213                $q2 = get_posts( array( 'category__in' => array() ) );
     214                $this->assertEmpty( $q2 );
     215
     216                $tag = wp_insert_term( 'woo', 'post_tag' );
     217                $tag_id = $tag['term_id'];
     218                $slug = get_tag( $tag_id )->slug;
     219                wp_set_post_tags( $post_id, $slug );
     220
     221                $q3 = get_posts( array( 'tag__in' => array( $tag_id ) ) );
     222                $this->assertNotEmpty( $q3 );
     223                $q4 = get_posts( array( 'tag__in' => array() ) );
     224                $this->assertEmpty( $q4 );
     225
     226                $q5 = get_posts( array( 'tag_slug__in' => array( $slug ) ) );
     227                $this->assertNotEmpty( $q5 );
     228                $q6 = get_posts( array( 'tag_slug__in' => array() ) );
     229                $this->assertEmpty( $q6 );
     230        }
    205231}