Aller au contenu

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 :

SQL5 lignes
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é :

SQL5 lignes
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 :

SQL7 lignes
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 :

SQL7 lignes
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 :

SQL1 ligne
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 :

SQL1 ligne
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 :

SQL2 lignes
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.

Auteur : Jean-Noël Mathonnet

Commentaires

Pas encore de commentaire. Soyez le premier !

Laisser un commentaire

Lorsque vous achetez via des liens sur ce site, nous pouvons toucher une commission d'affiliation. + d'infos