Oferta SiteGround Black Friday

Cómo eliminar las imágenes asociadas al borrar un producto, etc

¿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.

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.

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en los emoticonos para valorarlo!

Promedio de puntuación 4.6 / 5. Total de votos: 10

Hasta ahora ¡no hay votos!. Sé el primero en valorar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en las redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Ayúdame a mejorar este contenido!

Por favor, dime, ¿cómo puedo mejorarlo?

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

Sobre el autor

4 comentarios en “Cómo eliminar las imágenes asociadas al borrar un producto, etc”

  1. ¡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

  2. 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

  3. 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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información base sobre privacidad:
- Responsable: Fernando Tellado ([email protected])
- Fin del tratamiento: Moderación de comentarios para evitar spam
- Legitimación: Tu consentimiento
- Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal
- Derechos: Acceso, rectificación, portabilidad, olvido

 

Scroll al inicio