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?

pereyra
fuente

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 _...)

Corsario
fuente
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