Allow ORDER BY in `WP_Comment_Query::query()` to be disabled.

Disable ORDER BY by passing boolean false, an empty array, or the string
'none' to the 'orderby parameter. This mirrors the behavior of `WP_Query`.

Props psycleuk.
Fixes #29902.

git-svn-id: https://develop.svn.wordpress.org/trunk@30004 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Boone Gorges 2014-10-24 02:50:24 +00:00
parent ce810ba5b3
commit 382871ad9d
2 changed files with 45 additions and 2 deletions

View File

@ -387,7 +387,10 @@ class WP_Comment_Query {
$order = ( 'ASC' == strtoupper( $this->query_vars['order'] ) ) ? 'ASC' : 'DESC';
if ( ! empty( $this->query_vars['orderby'] ) ) {
// Disable ORDER BY with 'none', an empty array, or boolean false.
if ( in_array( $this->query_vars['orderby'], array( 'none', array(), false ), true ) ) {
$orderby = '';
} else if ( ! empty( $this->query_vars['orderby'] ) ) {
$ordersby = is_array( $this->query_vars['orderby'] ) ?
$this->query_vars['orderby'] :
preg_split( '/[,\s]/', $this->query_vars['orderby'] );
@ -588,7 +591,11 @@ class WP_Comment_Query {
$groupby = 'GROUP BY ' . $groupby;
}
$this->request = "SELECT $fields FROM $wpdb->comments $join WHERE $where $groupby $orderby $order $limits";
if ( $orderby ) {
$orderby = "ORDER BY $orderby $order";
}
$this->request = "SELECT $fields FROM $wpdb->comments $join WHERE $where $groupby $orderby $limits";
if ( $this->query_vars['count'] ) {
return $wpdb->get_var( $this->request );

View File

@ -577,4 +577,40 @@ class Tests_Comment_Query extends WP_UnitTestCase {
$this->assertContains( 'ORDER BY comment_date_gmt', $q->request );
}
/**
* @ticket 29902
*/
public function test_orderby_none() {
$q = new WP_Comment_Query();
$q->query( array(
'orderby' => 'none',
) );
$this->assertNotContains( 'ORDER BY', $q->request );
}
/**
* @ticket 29902
*/
public function test_orderby_empty_array() {
$q = new WP_Comment_Query();
$q->query( array(
'orderby' => array(),
) );
$this->assertNotContains( 'ORDER BY', $q->request );
}
/**
* @ticket 29902
*/
public function test_orderby_false() {
$q = new WP_Comment_Query();
$q->query( array(
'orderby' => false,
) );
$this->assertNotContains( 'ORDER BY', $q->request );
}
}