
Generalmente, al crear una publicación en WordPress, también se adjuntan imágenes. Sin embargo, a menudo, cuando se elimina una publicación, las imágenes permanecen. Hoy profundizaremos en el tema de «Eliminación automática de imágenes de publicaciones».
Razones por las cuales las imágenes no se eliminan al borrar una publicación
A pesar de que se elimina una publicación, las imágenes permanecen porque las imágenes y las publicaciones se manejan de manera diferente en la base de datos. Al eliminar una publicación, WordPress elimina la información y el contenido de la meta de la publicación, pero las imágenes asociadas se tratan como archivos adjuntos gestionados por separado. Por lo tanto, las imágenes permanecen por defecto.
Surge un problema aquí: cuando las imágenes relacionadas con la publicación permanecen, se desperdicia espacio de almacenamiento y puede causar problemas como la disminución de la velocidad del sitio.
Eliminar imágenes innecesarias de la Biblioteca de Imágenes (media library) cada vez es engorroso y se vuelve difícil de manejar a medida que aumentan las publicaciones.
Introducción a la función para la eliminación automática de imágenes de publicaciones
A continuación se muestra el código de la función para eliminar todas las imágenes asociadas al eliminar una publicación.
function delete_images_with_post( $post_id ) {
// Ignorar revisiones
if ( wp_is_post_revision( $post_id ) ) {
return;
}
// Eliminar imagen destacada
$thumbnail_id = get_post_thumbnail_id( $post_id );
if ( $thumbnail_id ) {
wp_delete_attachment( $thumbnail_id, true );
}
// Eliminar todas las imágenes adjuntas en el contenido
$attachments = get_attached_media( 'image', $post_id );
if ( $attachments ) {
foreach ( $attachments as $attachment ) {
wp_delete_attachment( $attachment->ID, true );
}
}
}
add_action( 'before_delete_post', 'delete_images_with_post' );
Cómo funciona la función
La función anterior está conectada al hook de acción `add_action( ‘before_delete_post‘, ‘delete_images_with_post’ );`. Este hook se ejecuta justo antes de que se elimine la publicación, y en este momento se ejecuta la función ‘delete_image_with_post‘, que busca y elimina las imágenes asociadas a la publicación.
1. **Ignorar revisiones**: La función primero verifica si la publicación eliminada es una revisión. Las revisiones son versiones anteriores que se crean automáticamente cada vez que se modifica una publicación, por lo que esta lógica de negocio permite saltar revisiones innecesarias.
2. **Eliminar imagen destacada**: Se utiliza la función `get_post_thumbnail_id` para encontrar la imagen destacada asociada a la publicación. Si existe una imagen destacada, se elimina utilizando la función `wp_delete_attachment`.
3. **Eliminar todas las imágenes en el contenido**: Se utiliza la función `get_attached_media` para encontrar todas las imágenes adjuntas en el contenido. Se especifica el tipo ‘image’ para extraer todos los formatos de imagen y se ejecuta un bucle para eliminar cada imagen.
Introducción a los hooks de acción utilizados y relacionados
El hook de acción `before_delete_post` se ejecuta justo antes de que se elimine una publicación. Cuando este hook se activa, se puede definir y llamar a funciones que implementen las funcionalidades necesarias en WordPress. Muchos plugins que mejoran las características de WordPress también utilizan estos ‘hooks‘ para implementar funcionalidades.
Hooks de acción similares
1. **after_delete_post**: Este hook se ejecuta después de que se ha eliminado una publicación. Es útil para el seguimiento o el registro de logs si se necesita un procesamiento posterior.
2. **delete_attachment**: Este hook se activa cuando se elimina un archivo adjunto. Se puede utilizar para la funcionalidad de eliminación de imágenes.
3. **before_delete_attachment**: Se ejecuta antes de que se elimine un archivo adjunto y se pueden realizar tareas adicionales o evitar la eliminación según ciertas condiciones.
¿Cómo usarlo?
Solo necesita agregar la función anterior al archivo functions.php en la carpeta de su tema. Para más información sobre cómo modificar functions.php, consulte el siguiente artículo.
Una vez que el código anterior se ha agregado a functions.php, al eliminar una publicación, también se eliminarán todas las imágenes incluidas en la publicación. (Se eliminarán tanto del registro de la base de datos como de los archivos de imagen almacenados en el servidor.)
Notas importantes
- No funcionará al ‘eliminar’ que envía a la ‘papelera’. Solo funcionará al ‘eliminar permanentemente’.
- Si la misma imagen se utiliza en otras publicaciones, la imagen no se mostrará en las otras publicaciones. Es recomendable no usar la misma imagen en múltiples publicaciones.
Conclusión
La forma de eliminar automáticamente las imágenes asociadas a una publicación es muy beneficiosa y ayuda mucho en la gestión de blogs. A través de la escritura de código, se puede maximizar la eficiencia de la base de datos y mejorar el rendimiento general del sitio.
El problema de las imágenes que permanecen al eliminar publicaciones es molesto, pero al aplicar el método anterior, se puede resolver fácilmente. ¡Cuando lo implemente, simplemente agregue el código anterior al archivo functions.php para utilizarlo de manera súper sencilla!
[wp_is_post_revision] : Función que verifica si una publicación es una revisión, y si es así, omite ciertas acciones.
[get_post_thumbnail_id] : Función que obtiene el ID de la imagen destacada de una publicación específica.
[wp_delete_attachment] : Función que elimina un archivo adjunto específico, y se puede establecer si se debe eliminar forzosamente con el segundo parámetro.
[get_attached_media] : Función que obtiene la lista de medios adjuntos a una publicación específica.