When using WP_Query's `'fields' => 'ids'` (or `'fields' => 'id=>parent'`), make sure the returned result is always an array of integers.

fixes #31194. see #27252.

git-svn-id: https://develop.svn.wordpress.org/trunk@31324 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Sergey Biryukov 2015-02-03 02:28:52 +00:00
parent f05f380638
commit 5e9b89bf59
2 changed files with 14 additions and 2 deletions

View File

@ -3421,10 +3421,11 @@ class WP_Query {
if ( 'ids' == $q['fields'] ) {
$this->posts = $wpdb->get_col( $this->request );
$this->posts = array_map( 'intval', $this->posts );
$this->post_count = count( $this->posts );
$this->set_found_posts( $q, $limits );
return array_map( 'intval', $this->posts );
return $this->posts;
}
if ( 'id=>parent' == $q['fields'] ) {
@ -3433,9 +3434,13 @@ class WP_Query {
$this->set_found_posts( $q, $limits );
$r = array();
foreach ( $this->posts as $post ) {
foreach ( $this->posts as $key => $post ) {
$this->posts[ $key ]->ID = (int) $post->ID;
$this->posts[ $key ]->post_parent = (int) $post->post_parent;
$r[ (int) $post->ID ] = (int) $post->post_parent;
}
return $r;
}

View File

@ -387,6 +387,7 @@ class Tests_Query_Results extends WP_UnitTestCase {
/**
* @ticket 27252
* @ticket 31194
*/
function test_query_fields_integers() {
@ -401,6 +402,7 @@ class Tests_Query_Results extends WP_UnitTestCase {
) );
$this->assertSame( $parents, $posts1 );
$this->assertSame( $parents, $this->q->posts );
$children = array(
(int) self::$child_one => (int) self::$parent_one,
@ -415,6 +417,11 @@ class Tests_Query_Results extends WP_UnitTestCase {
$this->assertSame( $children, $posts2 );
foreach ( $this->q->posts as $post ) {
$this->assertInternalType( 'int', $post->ID );
$this->assertInternalType( 'int', $post->post_parent );
}
}
/**