Supprimer automatiquement les utilisateurs inactifs après 2 mois


8

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 fonctionner différemment à la place - je veux qu'il supprime automatiquement les utilisateurs qui ne sont pas actifs depuis, disons, 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 requête que j'ai trouvé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 sélectionner les bons identifiants. Que dois-je changer pour le faire fonctionner?

Réponses:


2

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

Vous devez 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 semblent corrects.

Je viens de vérifier les documents de fonction de date mySQL et vous semblez faire cela mal.

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

Qui devrait rassembler les bons utilisateurs. Sinon, essayez-le sans la déclaration datiff et voyez si quelque chose est retourné. Sinon, quelque chose ne va pas avec la meta_key (par exemple, est-ce vraiment wp_wp _... ou simplement wp_kc _...)


Non, pas d'erreur de syntaxe cette fois, mais: "MySQL a renvoyé un jeu de résultats vide (c'est-à-dire zéro ligne)", et il y a certainement des utilisateurs qui n'ont pas visité le site depuis plus de 2 mois.
pereyra

Essayez la nouvelle requête que j'ai ajoutée. Je crois que votre requête ne fait pas ce que vous pensez qu'elle fait.
Privateer

Malheureusement, toujours "MySQL a renvoyé un jeu de résultats vide (c'est-à-dire zéro ligne)".
pereyra

Ajout d'une autre méthode avec une note pour vérifier également la valeur de votre méta-clé. Il semble étrange d'avoir wp_wp_kc_ * comme méta-clé.
Privateer

La valeur de la méta clé est correcte. Cela semble fonctionner, merci! SELECT user_id FROM wp_usermeta WHERE meta_key = 'wp_wp_kc_last_active_time' AND DATEDIFF (NOW (), FROM_UNIXTIME (meta_value))> 60;
pereyra du
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.