Eliminar automáticamente usuarios inactivos después de 2 meses


8

Estoy tratando de modificar esta función :

// automatically delete users after 7 days in wordpress
function wcs_auto_delete_users() {
global $wpdb;
$query = $wpdb->prepare( "SELECT ID FROM $wpdb->users WHERE datediff( now(), user_registered ) > 7" );
if ( $oldUsers = $wpdb->get_results( $query, ARRAY_N ) ) {
    foreach ( $oldUsers as $user_id ) {
        wp_delete_user( $user_id[0] );
    }
}
}
add_action( 'wcs_daily_clean_database', 'wcs_auto_delete_users' );

wp_schedule_event( time(), 'daily', 'wcs_daily_clean_database' );

para que funcione de manera diferente, quiero que elimine automáticamente a los usuarios que no han estado activos en, digamos, 2 meses. Tengo un complemento que rastrea la actividad del usuario y almacena los datos en wp_usermeta. Ejemplo:

user_id = 2; meta_key = wp_wp_kc_last_active_time; meta_value = 1422796627

Esta es la consulta que se me ocurrió:

SELECT user_id FROM wp_usermeta WHERE meta_key = 'wp_wp_kc_last_active_time' AND TIMESTAMPDIFF( second, now(), TIMESTAMP(SELECT meta_value) ) > 5184000

Pero no está seleccionando las ID correctas. ¿Qué debo cambiar para que funcione?

Respuestas:


2

Su consulta es incorrecta porque su tercer argumento para TIMESTAMPDIFF es incorrecto.

Debería usar meta_value en lugar de SELECT meta_value.

SELECT user_id FROM wp_usermeta WHERE meta_key = 'wp_wp_kc_last_active_time' AND TIMESTAMPDIFF( second, now(), TIMESTAMP(meta_value) ) > 5184000;

Pruebe eso y vea si los resultados comienzan a verse correctos.

Acabo de revisar los documentos de función de fecha mySQL y parece que estás haciendo esto mal.

Pruebe lo siguiente en su lugar:

SELECT user_id FROM wp_usermeta WHERE meta_key = 'wp_wp_kc_last_active_time' AND TIMESTAMPDIFF( MONTH, NOW(), FROM_UNIXTIME(meta_value) ) > 2;

O tal vez...

global $wpdb;

$query = <<<SQL
 SELECT user_id 
 FROM {$wpdb->usermeta} 
 WHERE 
    meta_key = 'wp_wp_kc_last_active_time'
    AND DATEDIFF( NOW(), FROM_UNIXTIME( meta_value ) ) > 60
SQL;

$query = $wpdb->prepare( $query );

Que debería reunir a los usuarios adecuados. De lo contrario, pruébelo sin la declaración con fecha y vea si se devuelve algo. Si no, entonces algo está mal con la meta_key (por ejemplo, ¿es realmente wp_wp _... o simplemente wp_kc _...)


No, no hay error de sintaxis esta vez, pero: "MySQL devolvió un conjunto de resultados vacío (es decir, cero filas)", y definitivamente hay usuarios que no han visitado el sitio en más de 2 meses.
— pereyra

Prueba la nueva consulta que agregué. Creo que su consulta no hace lo que cree que hace.
— Privateer

Lamentablemente, todavía obteniendo "MySQL devolvió un conjunto de resultados vacío (es decir, cero filas)".
— pereyra

Se agregó otro método con una nota para verificar el valor de su meta clave también. Parece extraño tener wp_wp_kc_ * como una meta clave.
— Privateer

El valor de la clave meta es correcto. Esto parece funcionar, gracias! SELECCIONE user_id FROM wp_usermeta WHERE meta_key = 'wp_wp_kc_last_active_time' Y DATEDIFF (NOW (), FROM_UNIXTIME (meta_value))> 60;
— pereyra
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.