Ticker

6/recent/ticker-posts

Ad Code

Responsive Advertisement

Eliminar automáticamente las imágenes al borrar una entrada

En un artículo anterior habíamos visto como eliminar automáticamente las imágenes de un producto de WooCommerce, sin embargo en este caso veremos como hacerlo para entradas incluyendo las imágenes que forman parte del contenido de la entrada.

 

Generalidades

Cuando creamos una entrada podemos agregar una imagen destacada, pero también imágenes como parte del contenido.
La idea es que al eliminar la entrada también se eliminen las imágenes asociadas.

Entrada con imágenes

 

Código para eliminar las imágenes de una entrada al eliminar al entrada

Hay que tener en cuenta que este código tendrá efecto sólo cuando la entrada se haya eliminado completamente, es decir eliminado de la papelera.

Ten en cuenta que si la imagen se usa en otra entrada o página no estará disponible ya que habrá sido eliminada físicamente.
add_action( 'before_delete_post', 'delete_all_post_images' );

function delete_all_post_images( $post_id ) {

        if ( get_post_type( $post_id ) !== 'post' ) {
                return;
        }

        // Borrar imagen destacada
        $thumbnail_id = get_post_thumbnail_id( $post_id );
        if ( $thumbnail_id ) {
        wp_delete_attachment( $thumbnail_id, true );
        }

        // Contenido de entrada
        $post_content = get_post_field( 'post_content', $post_id );

        preg_match_all( '/<img[^>]+src="([^">]+)"/', $post_content, $matches );

        $image_urls = $matches[1];

        foreach ( $image_urls as $image_url ) {
                // Obtener el ID de la imagen
                $attachment_id = attachment_url_to_postid( $image_url );
                if ( ! $attachment_id ) {
                        // Si no se encuentra, intenta sin las dimensiones
                        $image_url_no_dims = preg_replace( '/-\d+x\d+(?=\.\w+$)/', '', $image_url );
                        $attachment_id = attachment_url_to_postid( $image_url_no_dims );
                }
                if ( $attachment_id ) {
                        wp_delete_attachment( $attachment_id, true );
                }
        }
}

En el código anterior

  • Utilizamos el Hook before_delete_post que hace referencia a la función delete_all_post_images
  • Dentro de esa función hacemos una comprobación si el tipo de contenido es una entrada
  • Obtenemos y borramos la imagen destacada de la entrada
  • Para el contenido de la entrada usamos una expresión regular para obtener todas las URLs de imágenes usadas
  • Buscamos si hay algún medio asociado a dicha URL y obtenemos su ID
  • Si no existe buscamos la URL quitando el texto de las dimensiones y obtenemos su ID
  • Finalmente borramos la imagen asociada a esa URL

 

Conclusión

Como has podido comprobar es posible eliminar todas las imágenes asociadas a una entrada, imagen destacada e imágenes del contenido, al eliminar una entrada, en este artículo hemos visto como realizar esto de manera simple a través de código.

La entrada Eliminar automáticamente las imágenes al borrar una entrada es un artículo reciente del sitio DecodeCMS.

Enregistrer un commentaire

0 Commentaires