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.


Built from https://develop.svn.wordpress.org/trunk@25239


git-svn-id: http://core.svn.wordpress.org/trunk@25209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Scott Taylor 2013-09-04 18:51:10 +00:00
parent 3b1b03e4c4
commit 4a2c4c8f01
1 changed files with 3 additions and 1 deletions

View File

@ -2455,7 +2455,9 @@ class WP_Query {
if ( 'any' == $post_type ) { if ( 'any' == $post_type ) {
$in_search_post_types = get_post_types( array('exclude_from_search' => false) ); $in_search_post_types = get_post_types( array('exclude_from_search' => false) );
if ( ! empty( $in_search_post_types ) ) if ( empty( $in_search_post_types ) )
$where .= ' AND 1=0 ';
else
$where .= " AND $wpdb->posts.post_type IN ('" . join("', '", $in_search_post_types ) . "')"; $where .= " AND $wpdb->posts.post_type IN ('" . join("', '", $in_search_post_types ) . "')";
} elseif ( !empty( $post_type ) && is_array( $post_type ) ) { } elseif ( !empty( $post_type ) && is_array( $post_type ) ) {
$where .= " AND $wpdb->posts.post_type IN ('" . join("', '", $post_type) . "')"; $where .= " AND $wpdb->posts.post_type IN ('" . join("', '", $post_type) . "')";