¿No te parece a veces que en WordPress la biblioteca de medios va por libre del editor?
Me refiero a que es curioso que cuando subes una imagen para ilustrar un producto, página o entrada, en la biblioteca de medios aparece como «adjunta» a ese contenido, pero si por algún motivo decides borrar el producto, las imágenes siguen ahí, aunque ya no las necesites.
Esto es especialmente preocupante en caso de las tiendas online, en las que sí o sí las imágenes van asociadas a productos y la mayoría de las veces no son reutilizables.
Pues bien, estás de enhorabuena porque aquí tienes el modo de conseguir que cuando borres producto o lo que sea se borren automáticamente las imágenes adjuntas.
Índice de contenidos
Borrar la imagen destacada al borrar el contenido
Con el siguiente código se borrará solamente la imagen destacada al borrar el producto, etc.
/* Borrar imagen destacada al borrar entrada */ add_action( 'trashed_post', 'ayudawp_borrar_imagen_destacada_con_producto', 20, 1 ); function ayudawp_borrar_imagen_destacada_con_producto( $post_id ) { // Obtener el ID del tipo de contenido enviado a la papelera $post_type = get_post_type( $post_id ); // No ejecutar en otros tipos de contenido if ( $post_type != 'product' ) { return true; } // Obtener el ID de la imagen destacada $post_thumbnail_id = get_post_thumbnail_id( $post_id ); // Borrar la imagen destacada wp_delete_attachment( $post_thumbnail_id, true ); }
Borrar la galería de imágenes y la imagen destacada al borrar el contenido
Si también quieres borrar las imágenes adicionales adjuntas al contenido entonces el código sería este otro:
/* Borrar galeria e imagen destacada al borrar entrada */ add_action( 'trashed_post', 'ayudawp_borrar_imagenes_galeria_destacada_con_producto', 20, 1 ); function ayudawp_borrar_imagenes_galeria_destacada_con_producto( $post_id ) { // Obtener el ID del tipo de contenido enviado a la papelera $post_type = get_post_type( $post_id ); // No ejecutar en otros tipos de contenido if ( $post_type != 'product' ) { return true; } // Obtener el ID de la imagen destacada $post_thumbnail_id = get_post_thumbnail_id( $post_id ); // Obtener el array del campo personalizado de la galeria $gallery_images = get_field('gallery', $post_id); // loop por la galeria foreach ($gallery_images as $gallery_image) { // Obtener el ID de cada adjunto $gallery_id = $gallery_image['id']; // Borrar adjuntos wp_delete_attachment( $gallery_id, true ); } // Borrar imagen destacada wp_delete_attachment( $post_thumbnail_id, true ); }
Cómo usar y personalizar estos códigos
Como casi siempre, si quieres usar uno de estos códigos debes añadirlo a tu plugin de personalizaciones o, en su defecto, en el archivo functions.php del tema activo (al final del mismo).
En los ejemplos el tipo de contenido elegido es un producto (product), pero puedes personalizarlo para que actúe sobre otros tipos de contenido, como entradas (post), páginas (page), etc.
Igualmente, con las galerías de imágenes, el campo personalizado es el estándar de las galerías de WordPress (gallery) pero si es otro el que usas, mediante un plugin por ejemplo, simplemente sustitúyelo.
El objetivo final es que cuando envíes a la papelera un producto, entrada, página o lo que sea, le acompañen las imágenes asociadas al mismo.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!
¡Hola Fernando!
Muchas gracias por tus artículos, es contenido de muy buena calidad.
Me gustaría saber si al eliminar las imágenes con este código, también esta eliminando de la base de datos la información que se pudo haber guardado allí, te pregunto esto pensando en la optimizacion de la página web y sus bases de datos.
Muchas gracias de nuevo!
Un saludo,
Sebastián
hola, a mi lo que me sucedio es que borre una imagen de los medios y me sigue saliendo en las paginas, pero como un error, y no hay manera de que encuentre como quitar esa imagen oscura de la pagina
Hola Fernando,
Acabo de utilizar tu código para borrar la galería de imágenes y la imagen destacada porque es justo lo que iba buscando desde que la tienda esta operativa, al borrar el contenido cuando borro un producto de la tienda y me da el siguiente error: Mensaje de error: Uncaught Error: Call to undefined function get_field()
Sin embargo si que me ha borrado el producto de la tienda y la imagen destacada, pero cada vez que le doy a borrar un producto me aparece el error y tengo que volver atrás.
Muchas gracias.
Me pasa lo mismo