web-dev-qa-db-fra.com

Supprimer automatiquement les utilisateurs inactifs après 2 mois

J'essaie de modifier cette fonction :

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

pour travailler différemment à la place - je veux qu'il supprime automatiquement les utilisateurs qui n'ont pas été actifs, par exemple, 2 mois. J'ai un plugin qui suit l'activité des utilisateurs et stocke les données dans wp_usermeta. Exemple:

user_id = 2; meta_key = wp_wp_kc_last_active_time; meta_value = 1422796627

Voici la question que j'ai posée:

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

Mais ce n'est pas choisir les bons identifiants. Que devrais-je changer pour que cela fonctionne?

8
pereyra

Votre requête est incorrecte car votre troisième argument à TIMESTAMPDIFF est incorrect.

Vous devriez utiliser meta_value au lieu 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;

Essayez cela et voyez si les résultats commencent à paraître corrects.

Je viens de vérifier les la documentation de maSQL Date Function et vous semblez avoir mal agi.

Essayez plutôt ce qui suit:

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

Ou peut-être...

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

Ce qui devrait rassembler les bons utilisateurs. Sinon, essayez-le sans la déclaration de datiff et voyez si quelque chose est retourné. Si non, alors quelque chose ne va pas avec la méta_key (par exemple, est-ce vraiment wp_wp _... ou simplement wp_kc _...)

2
Privateer