Woocommerce

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

1 hay 1 solo Like :)

¿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 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 );
}