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 +2partie pour éviter les 3 premières lignes de l'en-tête et la bordure du tableau de la wp db querysortie.
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!