Return an empty array from `get_approved_comments()` when `$post_id` is empty.

This behavior was broken when moving the internals to `WP_Comment_Query` in
[30098]. As a result, `get_approved_comments( 0 )` was fetching *all* approved
comments, causing performance issues.

Props dd32.
Fixes #30412.

git-svn-id: https://develop.svn.wordpress.org/trunk@30402 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Boone Gorges 2014-11-20 01:51:38 +00:00
parent 78f496f378
commit 10b611b0c3
3 changed files with 29 additions and 1 deletions

View File

@ -136,7 +136,11 @@ function check_comment($author, $email, $url, $comment, $user_ip, $user_agent, $
* @return int|array $comments The approved comments, or number of comments if `$count`
* argument is true.
*/
function get_approved_comments( $post_id = 0, $args = array() ) {
function get_approved_comments( $post_id, $args = array() ) {
if ( ! $post_id ) {
return array();
}
$defaults = array(
'status' => 1,
'post_id' => $post_id,

View File

@ -30,4 +30,16 @@ class Tests_Comment extends WP_UnitTestCase {
// all comments types will be returned
$this->assertEquals( array( $ca1, $ca2, $c2, $c3, $c4, $c5 ), wp_list_pluck( $found, 'comment_ID' ) );
}
/**
* @ticket 30412
*/
public function test_get_approved_comments_with_post_id_0_should_return_empty_array() {
$p = $this->factory->post->create();
$ca1 = $this->factory->comment->create( array( 'comment_post_ID' => $p, 'comment_approved' => '1' ) );
$found = get_approved_comments( 0 );
$this->assertSame( array(), $found );
}
}

View File

@ -30,6 +30,18 @@ class Tests_Comment_Query extends WP_UnitTestCase {
$this->assertEqualSets( array( $c1, $c2, $c3, $c4, $c5 ), $found );
}
public function test_query_post_id_0() {
$c1 = $this->factory->comment->create( array( 'comment_post_ID' => $this->post_id, 'comment_approved' => '1' ) );
$q = new WP_Comment_Query();
$found = $q->query( array(
'post_id' => 0,
'fields' => 'ids',
) );
$this->assertEqualSets( array( $c1 ), $found );
}
/**
* @ticket 12668
*/