it-swarm.com.de

Inaktive Benutzer werden nach 2 Monaten automatisch gelöscht

Ich versuche diese Funktion zu ändern :

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

stattdessen anders arbeiten - Ich möchte, dass Benutzer automatisch gelöscht werden, die beispielsweise in 2 Monaten nicht aktiv waren. Ich habe ein Plugin, das die Benutzeraktivität verfolgt und die Daten in wp_usermeta speichert. Beispiel:

user_id = 2; meta_key = wp_wp_kc_last_active_time; meta_value = 1422796627

Dies ist die Frage, die ich mir ausgedacht habe:

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

Aber es geht nicht darum, die richtigen IDs auszuwählen. Was muss ich ändern, damit es funktioniert?

8
pereyra

Ihre Abfrage ist falsch, da Ihr drittes Argument für TIMESTAMPDIFF falsch ist.

Sie sollten meta_value anstelle von SELECT meta_value verwenden.

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

Versuchen Sie das und sehen Sie, ob die Ergebnisse korrekt aussehen.

Ich habe gerade die mySQL Date Function Docs durchgesehen und Sie scheinen das falsch zu machen.

Versuchen Sie stattdessen Folgendes:

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

Oder vielleicht...

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

Welches sollte die richtigen Benutzer sammeln. Wenn nicht, versuchen Sie es ohne die Anweisung datediff und prüfen Sie, ob etwas zurückgegeben wird. Wenn nicht, stimmt etwas mit dem meta_key nicht (z. B. ist es wirklich wp_wp _... oder nur wp_kc _...)

2
Privateer