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 Einzeiler ausprobieren :
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
oder in erweiterter Form:
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
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 anpassen wp_
.
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 der wp db query
Ausgabe zu vermeiden .
Hier weisen wir Benutzer 1 alle Beiträge neu zu, um den Hinweis zu vermeiden:
--reassign parameter not passed. All associated posts will be deleted. Proceed? [y/n]
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!