Si vous avez un grand nombre d'utilisateurs à supprimer, vous pouvez utiliser la commande wp user delete wp-cli pour éviter les délais d'expiration des scripts.
Voici un exemple de requête SQL pour supprimer tous les utilisateurs sans messages de tout type et de tout statut .
Vous pouvez donc essayer ce one-liner non testé :
wp user delete $(wp db query "SELECT ID FROM wp_users WHERE ID NOT IN (SELECT DISTINCT post_author FROM wp_posts ) AND ID NOT IN (1,2,3)" | tail -n +2 ) --reassign=1
ou sous forme développée:
wp user delete $(wp db query
"SELECT ID
FROM wp_users
WHERE ID NOT IN (
SELECT DISTINCT post_author FROM wp_posts
) AND ID NOT IN (1,2,3)" | tail -n +2
) --reassign=1
Notez que nous avons ajouté une AND ID NOT IN (1,2,3)
restriction supplémentaire pour vous assurer que ces utilisateurs ne sont pas supprimés (par exemple, les utilisateurs administrateurs). Vous devrez l'adapter à vos besoins ainsi qu'au préfixe de la table wp_
.
Lorsque j'ai brièvement testé cela pour quelques utilisateurs, j'ai remarqué que je devais ajouter la tail -n +2
partie pour éviter les 3 premières lignes de l'en-tête et la bordure du tableau de la wp db query
sortie.
Ici, nous réaffectons tous les messages à l'utilisateur 1, pour éviter la notification:
--reassign parameter not passed. All associated posts will be deleted. Proceed? [y/n]
J'espère que vous pourrez l'ajuster davantage à vos besoins, comme assouplir les conditions de suppression de l'utilisateur en les ajoutant WHERE post_status = 'publish'
.
Remarque: N'oubliez pas de sauvegarder avant de tester!