Make WordPress Core

Changeset 25239


Ignore:
Timestamp:
09/04/2013 06:50:04 PM (13 years ago)
Author:
wonderboymusic
Message:

Kill the query in the following edge case: post_type => 'any' but exclude_from_search => false returns no valid post types. Adds unit tests.

Props mitchoyoshitaka.
Fixes #19198.

Location:
trunk
Files:
2 edited

Legend:

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

    r25238 r25239  
    24562456                if ( 'any' == $post_type ) {
    24572457                        $in_search_post_types = get_post_types( array('exclude_from_search' => false) );
    2458                         if ( ! empty( $in_search_post_types ) )
     2458                        if ( empty( $in_search_post_types ) )
     2459                                $where .= ' AND 1=0 ';
     2460                        else   
    24592461                                $where .= " AND $wpdb->posts.post_type IN ('" . join("', '", $in_search_post_types ) . "')";
    24602462                } elseif ( !empty( $post_type ) && is_array( $post_type ) ) {
  • trunk/tests/phpunit/tests/query/results.php

    r25002 r25239  
    370370                ), wp_list_pluck( $posts, 'post_title' ) );
    371371        }
     372
     373        function test_exlude_from_search_empty() {
     374                global $wp_post_types;
     375                foreach ( array_keys( $wp_post_types ) as $slug )
     376                        $wp_post_types[$slug]->exclude_from_search = true;
     377
     378                $posts = $this->q->query( array( 'post_type' => 'any' ) );
     379
     380                $this->assertEmpty( $posts );
     381                $this->assertRegExp( '#AND 1=0#', $this->q->request );
     382
     383                foreach ( array_keys( $wp_post_types ) as $slug )
     384                        $wp_post_types[$slug]->exclude_from_search = false;
     385
     386                $posts2 = $this->q->query( array( 'post_type' => 'any' ) );
     387
     388                $this->assertNotEmpty( $posts2 );
     389                $this->assertNotRegExp( '#AND 1=0#', $this->q->request );
     390        }
    372391}
Note: See TracChangeset for help on using the changeset viewer.