If post_status is passed to WP_Query as an array containing 'any' and anything else, don't exclude the other values if they match when running any's exclusion logic.

Adds unit tests.

Fixes #28007.

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


git-svn-id: http://core.svn.wordpress.org/trunk@28443 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Scott Taylor 2014-05-29 20:42:18 +00:00
parent 96d788132a
commit d0bdcc3e7a

View File

@ -2768,8 +2768,11 @@ class WP_Query {
$p_status = array(); $p_status = array();
$e_status = array(); $e_status = array();
if ( in_array( 'any', $q_status ) ) { if ( in_array( 'any', $q_status ) ) {
foreach ( get_post_stati( array('exclude_from_search' => true) ) as $status ) foreach ( get_post_stati( array( 'exclude_from_search' => true ) ) as $status ) {
if ( ! in_array( $status, $q_status ) ) {
$e_status[] = "$wpdb->posts.post_status <> '$status'"; $e_status[] = "$wpdb->posts.post_status <> '$status'";
}
}
} else { } else {
foreach ( get_post_stati() as $status ) { foreach ( get_post_stati() as $status ) {
if ( in_array( $status, $q_status ) ) { if ( in_array( $status, $q_status ) ) {