it-swarm.com.de

Wie kann ich alle nicht angehängten Bilder mit WP-CLI oder einem anderen automatisierten Prozess stapelweise löschen?

Nach der Verwendung von WPML Media, einem Plugin, das für jede Sprache Duplikate von jedem Bild erstellt, haben wir jetzt fast 100.000 Duplikate, die wir nicht mehr verwenden und die wir entfernen müssen.

Wir müssen diese nicht nur aus dem Dateisystem selbst löschen, sondern auch sicherstellen, dass alle Referenzen in der Datenbank gelöscht werden, wie dies normalerweise der Fall wäre, wenn sie manuell über die Mediengalerie gelöscht würden.

Ich suche nach einer WP-CLI-Lösung, falls dies möglich ist. Diese Lösung war sehr hilfreich, funktioniert jedoch für alle Bilder, nicht nur für diejenigen, die im System nicht verbunden oder nicht verwendet werden.

Wie kann ich Medien und Anhänge mit WP-CLI Bulk löschen?

Bei einer anderen Lösung gab das OP in den Kommentaren an, dass er seine Lösung letztendlich mit SQL erreicht habe.

Wie lösche ich Tausende von nicht angehängten Bildern?

Ich bin kein Unbekannter in der Befehlszeile oder in MySQL, aber ich kenne WP -Tabellen nicht gut genug, um eine Abfrage zur Aufrechterhaltung der Integrität der Datenbank zu erstellen. Wenn ja, dann schlagen Sie bitte eine reine Datenbank-bezogene Lösung oder ein PHP-Skript vor, das sich in das System einhakt und die Dinge auf "wordpress" Weise erledigt.

Ich suche keine Plugin-basierte Lösung. Ich habe versucht, DNUI, DX Delete Attached Media und eine Reihe anderer, die alle schlecht endeten.

UPDATE: Die Verwendung von "parent = 0", um festzustellen, ob ein Bild angehängt ist oder nicht, war eine sehr clevere Lösung, und ich habe es als Antwort markiert.

Es gibt eine Möglichkeit, ein Bild in einem Beitrag legitim zu verwenden, und der übergeordnete Teil ist immer noch gleich 0. In diesem Fall rufen Sie die Bilddetails in der Medienbibliothek auf und kopieren die vollständige Bildquellen-URL, die manuell in einen Beitrag eingefügt werden soll. Die Lösung der akzeptierten Antwort löscht diese ebenfalls. Aus diesem Grund möchte ich auch andere Lösungen anregen, die dies berücksichtigen.

Das würde vielleicht erfordern, die Datenbank zu durchsuchen, um Instanzen des Bildnamens zu finden, vielleicht ähnlich dem Algorithmus, den wp-cli search-replace verwenden würde?

4
user658182

Sie können diese (nicht getestete) Änderung an der Antwort versuchen, auf die Sie durch @something verlinkt sind

wp post delete $(wp post list --post_type='attachment' --format=ids --post_parent=0)

anhänge löschen ohne eltern .

Um auf einen bestimmten mime type abzuzielen, z. image/jpeg versuchen:

wp post delete $(wp post list --post_type='attachment' \
    --format=ids --post_parent=0 --post_mime_type='image/jpeg')

Anmerkungen:

  • Denken Sie daran, vor dem Testen zuerst zu sichern!

  • Nicht angehängte Bilder können noch im Inhalt des Beitrags verwendet werden oder z. in Widgets.

5
birgire