Eliminar las imágenes al borrar un producto en WooCommerce es clave para evitar que tu biblioteca de medios se llene de archivos innecesarios. Por defecto, al eliminar un producto, sus imágenes —como la destacada o las de la galería— permanecen en el servidor, lo que puede afectar el rendimiento y dificultar la gestión del sitio.
Por eso, en este artículo quiero compartir contigo un fragmento de código, junto con su explicación paso a paso, que te permitirá eliminar las imágenes al borrar un producto en WooCommerce. Y si prefieres una solución más sencilla o no te sientes del todo cómodo tocando código, también podrás descargar un pequeño plugin que incluye esta funcionalidad lista para usar en tu WordPress.
Por qué automatizar la eliminación de imágenes
- Eliminar automáticamente las imágenes asociadas a los productos que ya no existen trae varias ventajas:
- Ahorro de espacio: Se eliminan archivos que ya no se necesitan.
- Mejor rendimiento: Menos archivos significa menos peso en el servidor.
- Gestión ordenada: Evita una biblioteca de medios saturada y difícil de manejar.
- Evita errores humanos: Al automatizar, se reduce el riesgo de olvidar borrar manualmente.
Código para eliminar las imágenes al borrar un producto en WooCommerce
Este fragmento de código se puede añadir en el archivo functions.php del tema hijo, o usando un plugin como Code Snippets, que recomiendo para gestionar fragmentos de forma segura.
/*
// Eliminar las imágenes al borrar un producto en WooCommerce
*/
add_action('before_delete_post', 'sw_eliminar_imagenes_producto', 10, 1);
function sw_eliminar_imagenes_producto($post_id) {
$producto = wc_get_product($post_id);
if (!$producto) {
return;
}
// Eliminar imagen destacada
$id_imagen_destacada = $producto->get_image_id();
if (!empty($id_imagen_destacada)) {
wp_delete_attachment($id_imagen_destacada, true);
}
// Eliminar imágenes de la galería
$ids_galeria = $producto->get_gallery_image_ids();
if (!empty($ids_galeria)) {
foreach ($ids_galeria as $id_imagen) {
wp_delete_attachment($id_imagen, true);
}
}
}
Qué hace este código
- Utiliza el hook before_delete_post para detectar cuando se elimina un producto.
- Recupera el producto con wc_get_product.
- Obtiene el ID de la imagen destacada y las imágenes de galería.
- Usa wp_delete_attachment() para eliminar permanentemente las imágenes, incluyendo sus versiones en miniatura.
⚠️ Consideraciones importantes
- Las imágenes se eliminan definitivamente, no van a la papelera.
- No se comprueba si las imágenes están usadas en otros productos o entradas, así que hay que tener cuidado con imágenes compartidas.
- Es recomendable hacer pruebas primero en un entorno de desarrollo o staging y tener siempre una copia de seguridad.
Algunas preguntas frecuentes
¿Existe algún plugin que elimine automáticamente las imágenes al borrar un producto?
No hay un plugin dedicado exclusivamente a esta función, pero herramientas como Media Cleaner o WP-Optimize permiten identificar y eliminar archivos no utilizados. Aun así, suelen requerir intervención manual. Este snippet, en cambio, automatiza el proceso por completo.
¿Qué sucede si una imagen que se va a eliminar también se usa en otro producto?
El código no comprueba si la imagen está compartida con otros productos o entradas. Si lo está, también será eliminada. Por eso, conviene usar imágenes únicas por producto o desarrollar una solución más avanzada que verifique su uso antes de borrarla.
¿Puedo recuperar las imágenes si me equivoco?
No. Las imágenes se eliminan de forma permanente y no se envían a la papelera. Se recomienda tener siempre copias de seguridad activas por si necesitas restaurar contenido eliminado por error.
¿Este código afecta a productos que ya han sido eliminados?
No, el código solo actúa cuando se elimina un producto desde ahora en adelante. No eliminará imágenes asociadas a productos borrados anteriormente.
¿Es compatible con cualquier tema y versión de WooCommerce?
Sí, el snippet usa funciones nativas de WordPress y WooCommerce, por lo que es compatible con la mayoría de temas bien desarrollados. Aun así, si estás usando plugins o temas que alteran el comportamiento de productos o medios, es mejor probar antes.
¿Se pueden eliminar también las imágenes de las variaciones al borrar un producto variable?
Sí. El código base elimina únicamente la imagen destacada y las de la galería del producto principal. Sin embargo, si trabajas con productos variables que tienen imágenes propias por variación, puedes ampliar el snippet para que también borre esas imágenes.
Aquí te dejo una versión mejorada del código que elimina las imágenes del producto principal y las de cada variación:
add_action('before_delete_post', 'sw_eliminar_imagenes_producto_y_variaciones', 10, 1);
function sw_eliminar_imagenes_producto_y_variaciones($post_id) {
if (get_post_type($post_id) !== 'product') {
return;
}
$producto = wc_get_product($post_id);
if (!$producto) {
return;
}
// Eliminar imagen destacada
$id_imagen_destacada = $producto->get_image_id();
if (!empty($id_imagen_destacada)) {
wp_delete_attachment($id_imagen_destacada, true);
}
// Eliminar imágenes de la galería
$ids_galeria = $producto->get_gallery_image_ids();
if (!empty($ids_galeria)) {
foreach ($ids_galeria as $id_imagen) {
wp_delete_attachment($id_imagen, true);
}
}
// Eliminar imágenes de variaciones
if ($producto->is_type('variable')) {
$variaciones = $producto->get_children();
foreach ($variaciones as $variacion_id) {
$imagen_variacion_id = get_post_thumbnail_id($variacion_id);
if (!empty($imagen_variacion_id)) {
wp_delete_attachment($imagen_variacion_id, true);
}
}
}
}
¿Prefieres no tocar código?
Si no te sientes cómodo editando archivos o prefieres una solución rápida, puedes descargar este plugin que ya incluye el código necesario para eliminar automáticamente las imágenes del producto y sus variaciones al borrarlo en WooCommerce. Solo tienes que instalarlo como cualquier otro plugin desde tu panel de WordPress.
Bonus útil si trabajas con fragmentos de código
Si aún no conoces todas las ventajas de Code Snippets para la inclusión de fragmentos personalizados en WordPress, es una herramienta muy práctica que vale la pena tener en cuenta. Te permite gestionar tus códigos sin necesidad de modificar el archivo functions.php, con opciones para activarlos solo en el frontend, backend o bajo condiciones específicas. Y si usas la versión Pro, puedes organizarlos por carpetas, exportarlos fácilmente y mucho más.
👉 Puedes conocer más y ver todas sus funciones en el sitio oficial: codesnippets.pro