Ich habe 10 Tausend Benutzer, ungefähr 98% dieser Benutzer haben nie einen Beitrag veröffentlicht (ich meine Beitrag keine Kommentare).
Ich brauche eine Möglichkeit, Benutzer mit 0 Beiträgen massenweise zu löschen.
Die Methode muss alle Beiträge zählen, die benutzerdefinierte Beitragstypen enthalten, und muss die richtige WordPress-Funktion verwenden, um einen Benutzer so zu löschen, als ob sie manuell im Dashboard gelöscht worden wären, und nicht nur eine Tabelle / Zeile auf MySQL zu löschen, da dies zu unerwarteten Ergebnissen führen könnte.
Es gibt ein altes Plugin , das dies tut, aber nicht alle Beitragstypen berücksichtigt und daher nicht wirklich verwendet werden kann.
Jede Hilfe geschätzt.
Antworten:
Wenn Sie eine große Anzahl von Benutzern löschen müssen, können Sie den Befehl wp user delete wp-cli verwenden , um Skript-Timeouts zu vermeiden.
Hier ist ein Beispiel für eine SQL-Abfrage zum Löschen aller Benutzer ohne Beiträge jeglichen Typs und Status .
Sie können daher diesen
ungetesteten Einzeilerausprobieren :oder in erweiterter Form:
Beachten Sie, dass wir eine zusätzliche
AND ID NOT IN (1,2,3)
Einschränkung hinzugefügt haben , um sicherzustellen, dass diese Benutzer nicht gelöscht werden (z. B. Administratorbenutzer). Sie müssen es an Ihre Bedürfnisse und auch an das Tabellenpräfix anpassenwp_
.Als ich dies für einige Benutzer kurz testete, bemerkte ich, dass ich das
tail -n +2
Teil hinzufügen musste , um die oberen 3 Zeilen in der Kopfzeile und den Tabellenrand derwp db query
Ausgabe zu vermeiden .Hier weisen wir Benutzer 1 alle Beiträge neu zu, um den Hinweis zu vermeiden:
Ich hoffe, Sie können es weiter an Ihre Bedürfnisse anpassen, z. B. indem Sie die Löschbedingungen des Benutzers durch Hinzufügen lockern
WHERE post_status = 'publish'
.Hinweis: Denken Sie daran, vor dem Testen ein Backup zu erstellen!
quelle
Y
oder verwenden--yes
. Wenn Sie die SQL so ändern, dass nur Benutzer gelöscht werden, die Beiträge veröffentlicht haben, benötigen Sie diese möglicherweise, um das Löschen von z. B. Entwürfen zu vermeiden. Beachten Sie, dass Sie in der Frage Benutzer erwähnt haben, die noch nie einen Beitrag veröffentlicht haben . Dies bedeutet streng genommen, dass sie möglicherweise Entwürfe haben. Ich nahm an, dass du das nicht im Sinn hattest ;-) Bitte sei sehr genau in der Frage, was du löschen möchtest, um das Rätselraten zu vermeiden. @ MichaelRogersHier ist eine Möglichkeit, dies in PHP zu tun. Es mag langsam und / oder zeitlich begrenzt sein, aber da es eine einmalige Sache ist, sollte es nicht zu viel ausmachen. Platzieren Sie es vorübergehend in Ihrer functions.php oder laden Sie es als neues Plugin hoch.
quelle
Gemessen am Quellcode des alten Plugins, das Sie erwähnt haben, sind die Post-Typen, die nicht berücksichtigt werden, Anhang und Überarbeitung . Ich denke, Sie können dies leicht beheben, indem Sie dies aus dem Quellcode der Plugin-Datei no-posts-user-delete.php entfernen
quelle