Pregunta:
Estoy tratando de usar meta_query
para devolver todos los usuarios que se han registrado hoy:
$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();
Sin embargo, esto no parece funcionar. Qué me estoy perdiendo ?
Respuesta:
Hace unos meses, actualicé el Codex para get_users()
y WP_User_Query
, con respecto al soporte de date_query
en la fecha de registro del usuario , en WordPress 4.1+.
Luego también agregué un ejemplo simple sobre cómo encontrar usuarios que se registraron durante las últimas 12 horas.
Pero la pregunta actual es cómo encontrar usuarios que se registraron hoy .
Simplemente podríamos usar una cadena de fecha relativa:
$args = [
'date_query' => [
[ 'after' => 'today', 'inclusive' => true ],
]
];
$query = new WP_User_Query( $args );
que generará la siguiente consulta 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 ;
También podríamos establecer los parámetros de year
, month
y day
explícitamente:
$args = [
'date_query' => [
[
'year' => current_time( 'Y' ),
'month' => current_time( 'm' ),
'day' => current_time( 'd' ),
],
]
];
$query = new WP_User_Query( $args );
que generará:
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 ;