J'ai 10 mille utilisateurs, environ 98% de ces utilisateurs n'ont jamais publié de message (je veux dire un message et non des commentaires).
J'ai besoin d'un moyen de supprimer en masse les utilisateurs avec 0 messages.
La méthode doit compter tous les messages, y compris les types de messages personnalisés et doit utiliser la fonction WordPress appropriée pour supprimer un utilisateur comme s'ils avaient été supprimés manuellement dans le tableau de bord et pas simplement déposer un tableau / une ligne sur mysql, car cela pourrait entraîner des résultats inattendus.
Il existe un ancien plugin qui fait cela, mais ne prend pas en compte tous les types de messages, il ne peut donc pas vraiment être utilisé.
Toute aide appréciée.
Réponses:
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é:ou sous forme développée:
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 tablewp_
.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 lawp db query
sortie.Ici, nous réaffectons tous les messages à l'utilisateur 1, pour éviter la notification:
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!
la source
Y
ou utiliser--yes
pour tout. Si vous modifiez le SQL pour supprimer uniquement les utilisateurs qui ont publié des articles, vous en aurez peut-être besoin pour éviter de supprimer, par exemple, les brouillons. Notez que vous avez mentionné dans la question les utilisateurs qui n'ont jamais publié de message .. Cela signifie strictement qu'ils pourraient avoir des brouillons. Je supposais que vous n'aviez pas cela à l'esprit ;-) Veuillez être très précis dans la question de ce que vous voulez supprimer pour éviter toute conjecture. @MichaelRogersVoici un moyen de le faire en PHP. Cela peut être lent et / ou timeout, mais comme c'est une chose unique, cela ne devrait pas trop d'importance. Placez temporairement dans votre fichier functions.php ou téléchargez-le en tant que nouveau plugin.
la source
À en juger par le code source de l'ancien plugin que vous avez mentionné, les types de publication qu'il ne considère pas sont les pièces jointes et les révisions . Je pense que vous pouvez facilement résoudre ce problème en le supprimant du code source du fichier plugin no-posts-user-delete.php
la source