Support date_query by user_registered in WP_User_Query.

Props ChriCo, nacin.
Fixes #27283.

git-svn-id: https://develop.svn.wordpress.org/trunk@29934 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Boone Gorges 2014-10-17 01:36:36 +00:00
parent 42646e67b3
commit 64bc8466db
3 changed files with 71 additions and 2 deletions

View File

@ -451,7 +451,8 @@ class WP_Date_Query {
$valid_columns = array(
'post_date', 'post_date_gmt', 'post_modified',
'post_modified_gmt', 'comment_date', 'comment_date_gmt'
'post_modified_gmt', 'comment_date', 'comment_date_gmt',
'user_registered',
);
// Attempt to detect a table prefix.
@ -463,7 +464,8 @@ class WP_Date_Query {
*
* @param array $valid_columns An array of valid date query columns. Defaults
* are 'post_date', 'post_date_gmt', 'post_modified',
* 'post_modified_gmt', 'comment_date', 'comment_date_gmt'
* 'post_modified_gmt', 'comment_date', 'comment_date_gmt',
* 'user_registered'
*/
if ( ! in_array( $column, apply_filters( 'date_query_valid_columns', $valid_columns ) ) ) {
$column = 'post_date';
@ -480,6 +482,9 @@ class WP_Date_Query {
'comment_date',
'comment_date_gmt',
),
$wpdb->users => array(
'user_registered',
),
);
// If it's a known column name, add the appropriate table prefix.

View File

@ -742,6 +742,12 @@ class WP_User_Query {
$this->query_where .= " AND $wpdb->users.ID NOT IN ($ids)";
}
// Date queries are allowed for the user_registered field.
if ( ! empty( $qv['date_query'] ) && is_array( $qv['date_query'] ) ) {
$date_query = new WP_Date_Query( $qv['date_query'], 'user_registered' );
$this->query_where .= $date_query->get_sql();
}
/**
* Fires after the WP_User_Query has been parsed, and before
* the query is executed.

View File

@ -0,0 +1,58 @@
<?php
/**
* @group user
* @group datequery
*/
class Tests_User_DateQuery extends WP_UnitTestCase {
/**
* @ticket 27283
*/
public function test_user_registered() {
$u1 = $this->factory->user->create( array(
'user_registered' => '2012-02-14 05:05:05',
) );
$u2 = $this->factory->user->create( array(
'user_registered' => '2013-02-14 05:05:05',
) );
$uq = new WP_User_Query( array(
'date_query' => array(
array(
'year' => 2012,
),
),
) );
$this->assertEqualSets( array( $u1 ), wp_list_pluck( $uq->results, 'ID' ) );
}
/**
* @ticket 27283
*/
public function test_user_registered_relation_or() {
$u1 = $this->factory->user->create( array(
'user_registered' => '2012-02-14 05:05:05',
) );
$u2 = $this->factory->user->create( array(
'user_registered' => '2013-02-14 05:05:05',
) );
$u3 = $this->factory->user->create( array(
'user_registered' => '2014-02-14 05:05:05',
) );
$uq = new WP_User_Query( array(
'date_query' => array(
'relation' => 'OR',
array(
'year' => 2013,
),
array(
'before' => '2012-03-01 00:00:00',
),
),
) );
$this->assertEqualSets( array( $u1, $u2 ), wp_list_pluck( $uq->results, 'ID' ) );
}
}