Muchas veces cuando estamos reajustando nuestro catálogo de WooCommerce nos damos cuenta de que queremos borrar un montón de productos de golpe. El comportamiento normal es que cuando se borre un producto todas las imágenes que tenga asignadas, ya sea como miniatura o en la galería, se quedarán en la biblioteca de medios de WordPress. Así que si estáis borrando los productos para ahorrar espacio o inodes en vuestro servidor, ¡mala suerte!, no os valió de nada.
Pero como casi siempre, esto tiene solución. Hoy os ponemos un pequeño plugin gratuito que se encarga de borrar las imágenes de los productos en cuanto se borran. Además, si tenéis algún plugin que lleve alguna galería personalizada o que tenga asignados más elementos de la biblioteca de medios sería fácil añadir que también borrara todo eso.
El plugin es algo tan sencillo como esto:
class DropwpImageCleaner { static $instance = false; public static function getInstance() { if ( !self::$instance ) self::$instance = new self; return self::$instance; } private function __construct() { add_action('before_delete_post', [$this, 'deleted_post'], 20, 1); } public function deleted_post($post_id) { $post_type = get_post_type( $post_id ); if ( !in_array( $post_type, ['product', 'product_variation']) ) { return; } $product = wc_get_product( $post_id ); if (!$product) { return; } $thumb_id = $product->get_image_id(); $gallery_ids = $product->get_gallery_image_ids(); if ($thumb_id) { $gallery_ids = array_merge( $gallery_ids, [$thumb_id] ); } foreach ( $gallery_ids as $attachment_id ) { wp_delete_attachment( $attachment_id, true ); } } } $dropwpCleaner = DropwpImageCleaner::getInstance();
Si necesitáis eliminar más elementos, basta con que lo añadáis al array de $gallery_id antes de recorrerla para borrar todo en la línea 33.
Tenéis el plugin en: Dropwp Image Cleaner