Elimina automaticamente gli utenti inattivi dopo 2 mesi


8

Sto cercando di modificare questa funzione :

// 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' );

invece, funziona diversamente: voglio che elimini automaticamente gli utenti che non sono attivi da, diciamo, da 2 mesi. Ho un plugin che tiene traccia dell'attività dell'utente e memorizza i dati in wp_usermeta. Esempio:

user_id = 2; meta_key = wp_wp_kc_last_active_time; meta_value = 1422796627

Questa è la domanda che mi è venuta in mente:

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

Ma non sta selezionando gli ID giusti. Cosa devo cambiare per farlo funzionare?

Risposte:


2

La tua query è errata perché il tuo terzo argomento su TIMESTAMPDIFF non è corretto.

Dovresti usare meta_value invece di 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;

Provalo e vedi se i risultati iniziano a sembrare corretti.

Ho appena controllato i documenti funzione data mySQL e sembra che tu stia facendo questo male.

Prova invece quanto segue:

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 forse...

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 );

Che dovrebbe raccogliere gli utenti giusti. In caso contrario, provalo senza la dichiarazione di dateiff e verifica se viene restituito qualcosa. In caso contrario, allora qualcosa non va con il meta_key (es. È davvero wp_wp _... o semplicemente wp_kc _...)


No, nessun errore di sintassi questa volta, ma: "MySQL ha restituito un set di risultati vuoto (ovvero zero righe)" e ci sono sicuramente utenti che non hanno visitato il sito da oltre 2 mesi.
— Pereyra,

Prova la nuova query che ho aggiunto. Credo che la tua domanda non faccia quello che pensi che faccia.
— Privateer

Purtroppo, ottenendo ancora "MySQL ha restituito un set di risultati vuoto (ovvero zero righe)".
— Pereyra,

Aggiunto un altro metodo con una nota per controllare anche il valore della tua meta chiave. Sembra strano avere wp_wp_kc_ * come meta-chiave.
— Privato il

Il valore della meta chiave è corretto. Questo sembra funzionare, grazie! SELEZIONA user_id DA wp_usermeta DOVE meta_key = 'wp_wp_kc_last_active_time' E DATEDIFF (NOW (), FROM_UNIXTIME (meta_value))> 60;
— Pereyra,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.