Wer kennt es nicht? Du löschst ein Produkt in WooCommerce, aber die zugehörigen Bilder bleiben weiterhin in der WordPress-Mediathek bestehen. Das sorgt nicht nur für unnötigen Speicherverbrauch, sondern auch für Chaos in deiner Mediathek. Doch keine Sorge, mit einem einfachen Code-Schnipsel kannst du dieses Problem für immer lösen!
Das Problem: Produktbilder bleiben nach dem Löschen erhalten
Standardmäßig entfernt WooCommerce beim Löschen eines Produkts zwar die Produktdaten aus der Datenbank, die hochgeladenen Bilder des Produkts jedoch nicht. Diese verbleiben in der Mediathek und müssen manuell gelöscht werden. Besonders bei umfangreichen Shops mit vielen Produkten kann das auf Dauer extrem zeitaufwendig sein.
Die Lösung: Automatisches Löschen von Produktbildern
Hier kommt der folgende Code ins Spiel. Sobald du ein Produkt löschst und anschließend den Papierkorb leerst, werden die Produktbilder – inklusive des Hauptbilds und der Galerie-Bilder – automatisch aus deiner WordPress-Mediathek entfernt.
Der Code
Füge den nachfolgenden Code in die Datei functions.php
deines WordPress-Child-Themes ein:
function delete_product_images_on_product_delete($post_id) {
// Überprüfen, ob es sich um ein Produkt handelt
if (get_post_type($post_id) !== 'product') {
return; // Beenden, wenn es kein Produkt ist
}
// Hauptbild des Produkts holen
$product_image_id = get_post_thumbnail_id($post_id);
// Hauptbild löschen
if ($product_image_id) {
wp_delete_attachment($product_image_id, true);
}
// Galerie-Bilder IDs holen
$gallery_image_ids = get_post_meta($post_id, '_product_image_gallery', true);
if ($gallery_image_ids) {
$gallery_image_ids_array = explode(',', $gallery_image_ids);
foreach ($gallery_image_ids_array as $gallery_image_id) {
wp_delete_attachment($gallery_image_id, true);
}
}
}
add_action('before_delete_post', 'delete_product_images_on_product_delete');
Wie funktioniert der Code?
- Produkt überprüfen:
Der Code prüft zunächst, ob der zu löschende Beitrag vom Typproduct
ist. Wenn es sich um ein anderes Post-Typ-Element handelt, wird der Vorgang abgebrochen. - Hauptbild entfernen:
Mithilfe vonget_post_thumbnail_id()
wird die ID des Hauptbilds des Produkts abgerufen und anschließend mitwp_delete_attachment()
gelöscht. - Galerie-Bilder entfernen:
Falls das Produkt Galerie-Bilder hat, werden diese IDs aus dem Meta-Feld_product_image_gallery
geholt, in ein Array umgewandelt und nacheinander gelöscht. - Ausführung beim Leeren des Papierkorbs:
Der Hookbefore_delete_post
sorgt dafür, dass die Bilder erst dann gelöscht werden, wenn der Papierkorb geleert wird. So bleibt eine Sicherheitsmarge für versehentlich gelöschte Produkte.
Vorteile des Codes
- Automatisierung: Keine manuelle Bildlöschung mehr notwendig.
- Ordnung: Deine WordPress-Mediathek bleibt sauber und aufgeräumt.
- Speicherplatz sparen: Überflüssige Bilder belegen keinen unnötigen Speicher mehr.
- Sicherheit: Bilder werden erst gelöscht, wenn der Papierkorb geleert wird – so kannst du gelöschte Produkte bei Bedarf wiederherstellen.
Best Practices für die Anwendung
- Backup erstellen:
Bevor du Änderungen an derfunctions.php
vornimmst, erstelle ein Backup deiner Seite. So bist du auf der sicheren Seite, falls etwas schiefgeht. - Child-Theme verwenden:
Ändere niemals diefunctions.php
deines Haupt-Themes, sondern nutze ein Child-Theme. Andernfalls könnten deine Änderungen beim nächsten Update überschrieben werden. - Testen:
Probiere den Code zunächst in einer Entwicklungsumgebung aus, um sicherzustellen, dass er wie gewünscht funktioniert.
Mit diesem einfachen, aber effektiven Code kannst du sicherstellen, dass WooCommerce-Produktbilder automatisch gelöscht werden, wenn du ein Produkt entfernst. Das spart Zeit, Speicherplatz und hält deine Mediathek sauber. Probier es aus und mach deinen WooCommerce-Shop noch effizienter!
Hast du Fragen oder Anregungen? Lass es mich in den Kommentaren wissen!
Hinterlasse jetzt einen Kommentar