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.