Supprimer des clients WooCommerce et utilisateurs WordPress dans la base de données en MySQL (PHPMyAdmin)
J'ai eu un cas avec des milliers de comptes spams enregistrés sur un site WooCommerce, des clients sans commande, et ai dû chercher comment supprimer certains comptes clients WordPress en SQL dans PHPMyAdmin, sans supprimer les utilisateurs qui avaient passé commande ou qui étaient plus "légitimes".
Après pas mal de recherches et de tests, voici la solution que j'ai trouvée.
La requête SQL suivante sélectionne les utilisateurs qui n'ont pas passé de commande et ne sont pas auteur d'un article :
SELECT * from wp_users where wp_users.ID not in (
SELECT meta_value FROM wp_postmeta WHERE meta_key = '_customer_user'
) AND wp_users.ID not in (
select distinct(post_author) from wp_posts
)J'ai remarqué que cela sélectionne des comptes légitimes, qui sont les seuls à avoir une valeur dans la colonne "user_activation_key", et ai donc ajouté :
SELECT * from wp_users where wp_users.ID not in (
SELECT meta_value FROM wp_postmeta WHERE meta_key = '_customer_user'
) AND wp_users.ID not in (
select distinct(post_author) from wp_posts
) AND wp_users.user_activation_key = '' Puis que les comptes clients utilisateurs spams n'avaient pas de nom :
SELECT * from wp_users where wp_users.ID not in (
SELECT meta_value FROM wp_postmeta WHERE meta_key = '_customer_user'
) AND wp_users.ID not in (
SELECT meta_value FROM wp_postmeta WHERE meta_key = 'first_name' AND meta_value = ''
) AND wp_users.ID not in (
select distinct(post_author) from wp_posts
) AND wp_users.user_activation_key = '' Vous pouvez jouer avec ces requêtes SQL qui sélectionnent les clients qui n'ont pas passé de commande ou les utilisateurs spams, et lorsque vous êtes satisfait de votre sélection, après avoir fait une sauvegarde de votre base de données, lancez la requête en remplaçant "SELECT *" par "DELETE", par exemple dans mon cas :
DELETE from wp_users where wp_users.ID not in (
SELECT meta_value FROM wp_postmeta WHERE meta_key = '_customer_user'
) AND wp_users.ID not in (
SELECT meta_value FROM wp_postmeta WHERE meta_key = 'first_name' AND meta_value = ''
) AND wp_users.ID not in (
select distinct(post_author) from wp_posts
) AND wp_users.user_activation_key = '' Ensuite, il faut nettoyer les données dans wp_usermeta pour les utilisateurs qui n'existent plus :
delete from wp_usermeta where wp_usermeta.user_id not in (select ID from wp_users);Puis faire de même dans la table wp_wc_customer_lookup :
delete from wp_wc_customer_lookup where wp_wc_customer_lookup.user_id not in (select ID from wp_users);Après, je ne sais plus pourquoi, mais j'ai supprimé les sessions comme ceci :
DELETE FROM wp_options
WHERE option_name LIKE '_wc_session_%' OR option_name LIKE '_wc_session_expires_%'Miracle, les utilisateurs ont bien disparu du menu "Comptes / Utilisateurs".
Mais ils sont encore affichés dans WooCommerce > Clients !
Après de longues recherches ... j'ai trouvé qu'il s'agit simplement d'un système de cache WordPress WooCommerce, qu'on vide en allant dans WooCommerce > État > Outils, et en cliquant sur les boutons "Effacer les données temporaires" (ligne "WooCommerce transients") et "Effacer" (ligne "Effacer le cache de statistiques") qui s'y trouvent.
Si cela vous a aidé et vous a économisé des heures de recherches, laissez un commentaire d'appréciation ci-dessous. Si vous avez une meilleure solution, des corrections ou des suggestions, laissez-les en commentaire et je mettrai à jour l'article.
Commentaires
Pas encore de commentaire. Soyez le premier !