問題描述

我正在嘗試使用 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。