Índice de contenido.
- Filtros para obtener usuarios en el tiempo deseado.
- Qué es y cómo funciona meta_query.
- Importante tomar en cuenta.
En el artículo anterior te explicaba Cómo obtener y mostrar una lista de usuarios en WordPress, y ahora en este ejemplo voy a explicar como usar el código anterior para hacer un uso practicó, como el ejemplo de este artículo donde vamos a Filtrar y ordenar usuarios en WordPress por última actividad y rol, esto para que posteriormente tú tomes una acción, como guardarlos en una base de datos para después enviarles correos, darlos de baja por inactividad, etc.
Aquí el código para los que nada más vienen a copiar y pegar, como lo he hecho yo en algunas ocasiones 😀 :
// Función para obtener usuarios filtrados con más de cierta cantidad de días.
function MostrarUsuariosFiltroUltimoLogin($days_ag){
$current_time = current_time( 'mysql' ); // Obtener la fecha y hora actual
$days_ago = date( 'Y-m-d H:i:s', strtotime( $current_time . '-30 days' ) ); // Calcular fecha asiganda.
$args = array(
'orderby' => 'last_activity', // Ordenar por última actividad.
'role' => 'subscriber', // Mostrar solo usuarios con rol "subscriber".
'meta_query' => array(
array(
'key' => 'last_activity', // Meta con el último momento de actividad del usuario.
'value' => $days_ago, // Valor de la meta debe ser menor a los días asigandos atrás.
'compare' => '<=', // Comparar con "menor qué"
'type' => 'DATETIME', // Tipo de meta es "DATETIME"
),
),
);
// Ejecutar la consulta de usuarios con los argumentos especificados
$users = get_users( $args );
// Recorreo la matriz de los usuarios solicitados.
foreach ( $users as $user ) {
// Decide qué hacer.
}
}
Este código muestra cómo obtener y mostrar una lista de usuarios en WordPress que cumplan con ciertos criterios. La función get_users()
se utiliza para obtener la lista de usuarios y se pasa una serie de parámetros para filtrar y ordenar los usuarios.
Empecemos por analizar cada línea de código. La primera línea obtiene la fecha y hora actual en formato “mysql”, que es un formato de fecha y hora utilizado por WordPress. La segunda línea utiliza la función date()
y la función strtotime()
para calcular la fecha y hora de hace “$days_ag”, para este ejmplo supongamos que su valor es de 30 días atrás.
Luego, se define una matriz de argumentos para pasar a la función get_users()
. Esta matriz contiene tres elementos: orderby
, role
y meta_query
. El elemento orderby
indica el campo por el cual se deben ordenar los usuarios. En este caso, se establece como “last_activity” para ordenar por última actividad. El elemento role
indica el rol de usuario por el cual se deben filtrar los usuarios. En este caso, se establece como “subscriber” para mostrar solo usuarios con rol “subscriber”.
El elemento meta_query
es una matriz que se utiliza para filtrar los usuarios por valores de meta. En este caso, se está filtrando por usuarios que no hayan tenido actividad desde más de 29 días (la imagen de abajo lo explica mejor). La matriz meta_query
tiene un elemento con cuatro parámetros: key
, value
, compare
y type
. El parámetro key
indica el nombre de la meta que se va a comparar. En este caso, se establece como “last_activity” para comparar con el último momento de actividad del usuario. El parámetro value
indica el valor de la meta que se va a comparar. En este caso, se establece como la fecha y hora de hace 30 días atrás. El parámetro compare
indica el operador de comparación que se va a usar. En este caso, se establece como “menor que” para mostrar solo usuarios que no han iniciado sesión desde hace más de 29 días.
Pausa
Filtros para obtener usuarios en el tiempo deseado.
Usuarios con más de 30 días sin iniciar sesión.
Esta línea del tiempo muestra en color rojo el rango que estamos obtenido con el código de arriba:

Usuarios con menos de 30 días sin iniciar sesión.
Si quisiéramos que mostrara los usuarios que no han iniciado sesión hasta el día 30, solo cambiamos esta línea:
'compare' => '<=', // Comparar con "menor qué"
Por esta:
'compare' => '>=', // Comparar con "mayor qué"
Con esta pequeño cambio mostramos los usuarios en esta línea del tiempo:

Usuarios con un rango de días sin iniciar sesión.
Y si deseáremos mostrar a los usuarios con un rango en especifico tendríamos que hacer cambios en el código. Emperezaría cambiando los parámetros que entran a la función:
function MostrarUsuariosFiltroUltimoLogin($dias_atras_min, $dias_atras_max)
Después calcularíamos las fechas:
// Calcular la fecha y hora X días atrás, donde X es el número especificado en el parámetro $dias_atras_min
$fecha_hora_atras_min = date( 'Y-m-d H:i:s', strtotime( $current_time . "-{$dias_atras_min} days" ) );
// Calcular la fecha y hora X días atrás, donde X es el número especificado en el parámetro $dias_atras_max
$fecha_hora_atras_max = date( 'Y-m-d H:i:s', strtotime( $current_time . "-{$dias_atras_max} days" ) );
Y definiríamos la consulta de esta forma:
// Definir argumentos para la consulta de usuarios
$args = array(
'orderby' => 'last_activity', // Ordenar por última actividad
'role' => 'subscriber', // Mostrar solo usuarios con rol "subscriber"
'meta_query' => array(
array(
'key' => 'last_activity', // Meta con el último momento de actividad del usuario
'value' => array( $fecha_hora_atras_min, $fecha_hora_atras_max ), // Valor de la meta debe estar entre las fechas y horas $dias_atras_min y $dias_atras_min atrás
'compare' => 'BETWEEN', // Comparar con "entre"
'type' => 'DATETIME', // Tipo de meta es "DATETIME"
),
),
);
Estos cambios nos permiten recoger los datos de un rango, por ejemplo, del día 15 al 30:

Qué es y cómo funciona meta_query.
meta_query
es una opción que se puede utilizar en la función get_users()
de WordPress para realizar búsquedas avanzadas en la tabla de metadatos de usuario. Esta opción permite especificar una o más condiciones que deben cumplirse para que un usuario sea incluido en el resultado de la consulta.
Cada condición se especifica en un array, y se pueden utilizar diferentes claves y valores para definir la condición de búsqueda. Algunos ejemplos de claves que se pueden utilizar son:
'key'
: especifica el nombre de la meta que se quiere buscar.'value'
: especifica el valor que debe tener la meta para que se cumpla la condición.'compare'
: especifica cómo se debe comparar el valor de la meta con el valor especificado. Algunos valores posibles son “=”, “!=”, “>”, “>=”, “<“, “<=”, “IN”, “NOT IN”, “BETWEEN”, “NOT BETWEEN”.'type'
: especifica el tipo de dato de la meta. Algunos valores posibles son “NUMERIC”, “BINARY”, “CHAR”, “DATE”, “DATETIME”, “DECIMAL”, “SIGNED”, “
Continuamos
El parámetro type
indica el tipo de meta que se está comparando. En este caso, se establece como “DATETIME” porque el valor de la meta es una fecha y hora.
Una vez que se ha definido la matriz de argumentos, se pasa a la función get_users()
para obtener la lista de usuarios que cumplan con los criterios especificados. La función get_users()
devuelve una matriz de objetos de usuario que cumplen con los criterios especificados.
Una vez que se ha obtenido la lista de usuarios, se puede recorrer con un bucle foreach
para mostrar cada usuario de la lista. Por ejemplo, para mostrar el nombre de cada usuario de la lista, se podría usar un código como este:
$users = get_users( $args );
foreach ( $users as $user ) {
echo '<li>' . $user->display_name . '</li>';
}
En este ejemplo, se recorre la lista de usuarios con un bucle foreach
y se muestra el nombre de cada usuario con la sentencia echo
. El nombre del usuario se obtiene usando la propiedad display_name
del objeto de usuario.
La forma en lo que yo utilizo esto es para generar una base de datos con nombre y correo de los usuarios que tiene ciertos días sin entrar a nuestra plataforma y así poder enviarles correos personalizados.
Importante tomar en cuenta.
Si magenas un gran volumen de usuarios puede que tengas problemas al realizar la consulta $users = get_users( $args ); ,para esto re recomiendo hacer uso de ‘number’ para definir el número de usuarios que deseas traer, por ejemplo 2,000 y para que no se repitan los usuarios puedes usar ‘offset’ para que decidas en que punto ir haciendo la consulta, por ejemplo:
Para pedir los primeros 2,000 quedaría así:
'number' => 2000,
'offset' => 0,
Para pedir los siguientes 2,000 ahora empezamos con ‘offset’ en 2000:
'number' => 2000,
'offset' => 2000,
Y así sucesivamente. Estas opciones se agregan en tus argumentos para la consulta de usuarios. Algo así:
// Definir argumentos para la consulta de usuarios
$args = array(
'number' => 1000, // Obtener 1000 usuarios en la consulta
'offset' => 0, // Comenzar a obtener desde el usuario especificado en el parámetro $offset
'orderby' => 'last_activity', // Ordenar por última actividad
'role' => 'subscriber', // Mostrar solo usuarios con rol "subscriber"
'meta_query' => array(
array(
'key' => 'last_activity', // Meta con el último momento de actividad del usuario
'value' => $fecha_hora_atras, // Valor de la meta debe ser mayor que la fecha y hora X días atrás
'compare' => '<', // Comparar con "mayor que"
'type' => 'DATETIME', // Tipo de meta es "DATETIME"
),
),
);
Espero que este artículo te haya ayudado a entender cómo funciona este código y cómo obtener y mostrar una lista de usuarios en WordPress que cumplan con ciertos criterios. Si tienes alguna pregunta más abajo tienes dos enlaces para hacerlo 😉