问题描述

我正在尝试使用 meta_query 返回今天注册的所有用户:

$args = array(
    'meta_query' => array(
        array(
            'key' => 'user_registered',
            'value' => date('Y-m-d'),
            'compare' => '=',
            'type' => 'DATE'
        )
    )
);

$query = new WP_User_Query( $args );
$users = $query->get_results();

这似乎不行。我失踪了什么

最佳解决方案

几个月前,我更新了 get_users()WP_User_Query 的 Codex,关于用户注册日期在 WordPress 4.1+中的 date_query 支持。

然后我还添加了一个 simple example 如何找到在过去 12 小时内注册的用户。

但目前的问题是如何找到今天注册的用户。

我们可以简单地使用相对日期字符串:

$args = [
    'date_query' => [
        [ 'after'  => 'today', 'inclusive' => true ],
    ]
];

$query = new WP_User_Query( $args );

这将生成以下 SQL 查询:

SELECT SQL_CALC_FOUND_ROWS wp_users.* FROM wp_users WHERE 1=1 AND (
    wp_users.user_registered >= '2015-11-06 00:00:00'
) ORDER BY user_login ASC ;

我们还可以明确设置 yearmonthday 参数:

$args = [
    'date_query' => [
        [
            'year'  => current_time( 'Y' ),
            'month' => current_time( 'm' ),
            'day'   => current_time( 'd' ),
        ],
    ]
];

$query = new WP_User_Query( $args );

这将产生:

SELECT SQL_CALC_FOUND_ROWS wp_users.* FROM wp_users WHERE 1=1 AND (
    (
        YEAR( wp_users.user_registered ) = 2015
        AND MONTH( wp_users.user_registered ) = 11
        AND DAYOFMONTH( wp_users.user_registered ) = 6
    )
) ORDER BY user_login ASC ;

次佳解决方案

字段 user_registered 不是在*_usermeta 表中,而是在*_users 中。

在使用 WP_User_Query 时,似乎也没有任何适当的钩子更改 SQL 语句。看来你需要使用直接的 SQL 语句。

另一个 (次要的) 并发症是注册日期存储为 date-time 。

function wpse51485_get_users_registered_on( $date='' ){
    global $wpdb;

    if( empty($date) )
        $date = date('Y-m-d');

    $morning = new DateTime($date. ' 00:00:00');
    $night = new DateTime($date.' 23:59:59');
    $m = $morning->format('Y-m-d H:i:s');
    $n = $night->format('Y-m-d H:i:s');

    $sql = $wpdb->prepare("SELECT wp_users.* FROM wp_users WHERE 1=1 AND CAST(user_registered AS DATE) BETWEEN %s AND %s ORDER BY user_login ASC",$m,$n);

    $users = $wpdb->get_results($sql);

    return $users;
 }

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。