Cómo eliminar imágenes no utilizadas de su biblioteca de medios en WordPress
Publicado: 2019-10-15Cuando tu web lleva un tiempo funcionando, es normal que haya cosas que ya no son necesarias pero que siguen existiendo. Uno de los ejemplos más molestos es el de las imágenes que ya no se usan pero que siguen ocupando espacio en tu WordPress.
Estas imágenes que ya no usas en tus publicaciones o páginas, o en cualquier otro tipo de contenido que ha quedado obsoleto, quedan alojadas en tu servidor, desperdiciando recursos y espacio de almacenamiento. Lo mejor que puedes hacer con ellos es eliminarlos si no los vas a volver a utilizar. Pero, ¿cómo puede encontrarlos y asegurarse de que no se estén utilizando en ninguna parte? Vamos a verlo…
Antes de empezar
Lo primero que debe hacer si desea eliminar imágenes de su WordPress que ya no se utilizan es hacer una copia de seguridad de su sitio web, incluidos los archivos multimedia dentro de la carpeta wp-content .
Aunque las imágenes que carga en la biblioteca de medios se almacenan en wp-content/uploads/ , es posible que si usa un complemento para cargar los archivos, terminen en una carpeta diferente. Por lo tanto, asegúrese de tener una copia de seguridad de su base de datos de WordPress y todos los archivos dentro de la carpeta wp-content y no solo wp-content/uploads .
Una vez que tengas la copia de seguridad creada, podemos continuar con los siguientes pasos…
Detectar imágenes huérfanas en WordPress
Hay varias formas de detectar imágenes que ya no se usan en ningún contenido dentro de su sitio web de WordPress. Lo más efectivo es buscarlos en la base de datos de WordPress.
Para ello debemos saber que las imágenes que subiste a la mediateca de WordPress se almacenan en la tabla wp_posts como si fueran un post o una página. Lo que los distingue de otros contenidos almacenados en esta tabla es que tienen el valor adjunto en la columna post_type .
Por cierto, aviso importante: si no tienes conocimientos sobre bases de datos, lo mejor es que tengas cuidado con lo que haces a partir de ahora, mantén una copia de seguridad de la base de datos y échale un vistazo a este artículo del Codex de WordPress donde explican todo en mas detalle.
¿Donde estábamos? Ah, sí: queremos encontrar todas esas imágenes que no se están utilizando en tu WordPress. Esto es más fácil de definir que de hacer, pero no te preocupes, intentaremos explicarlo paso a paso y de forma sencilla.
Todo lo que tenemos que hacer es escribir una consulta en lenguaje SQL para ejecutar en la base de datos MySQL de WordPress. Si no sabe cómo acceder a la base de datos de su sitio web, comuníquese con su proveedor de alojamiento para obtener instrucciones sobre cómo hacerlo. Si te dan acceso a un phpMyAdmin, también está bien
La consulta que debes ejecutar es:
Vamos a desglosarlo.
Lo primero que hacemos es comenzar con una instrucción SELECT para seleccionar todas las filas determinadas de una tabla específica. En la línea 2, la estrella significa que queremos "todas las columnas" en cada fila.
Las líneas 3 y 4 indican la(s) tabla(s) que nos interesa(n). En este caso, queremos seleccionar los archivos adjuntos de WordPress que, como dije, están almacenados en wp_posts , así que esa es la tabla que usaremos.
A partir de la línea 5, la declaración WHERE nos permite agregar condiciones para filtrar las filas que queremos y excluir el resto. Cada condición entre las líneas 6 y 14 está separada por la instrucción AND , que sirve para indicar que todas las condiciones deben cumplirse a la vez. Si una fila no cumple con todas las condiciones WHERE , no se devolverá en la salida de la consulta SELECT .
La primera condición en la línea 6 define que queremos obtener solo las filas cuyo valor en la columna post_type sea archivo adjunto . Como dije antes, las publicaciones y las páginas también se almacenan en la tabla wp_posts , entre otros contenidos. Con esta condición solo obtendremos las imágenes.
Para cada archivo adjunto , WordPress almacena si se cargó dentro del contexto de una página o publicación usando la columna post_parent . Por lo tanto, la condición de la línea 8 nos hace obtener solo aquellos archivos adjuntos cuyo post_parent no existe (es decir, no están vinculados a ninguna página o publicación).

Por otro lado, si elegimos una imagen para que sea la imagen destacada de una publicación o página, WordPress crea una fila de metadatos en la tabla wp_postmeta con la clave _thumbnail_id y, como valor, establece el identificador de la imagen adjunta . En la línea 10 de la consulta obtenemos aquellas imágenes cuyo identificador no aparece como el valor de una fila de wp_postmeta para la clave _thumbnail_id .
La línea 12 define una condición para filtrar imágenes cuya URL no aparece en el contenido de publicaciones o páginas. Es decir, si la URL de la imagen aparece dentro del contenido, asumimos que la imagen sigue siendo útil y, por lo tanto, no debe eliminarse. Tenga en cuenta que la URL de la imagen aparece en la columna guid de la tabla wp_posts .
Finalmente, es posible que hayas usado algún complemento que coloque la URL de las imágenes dentro de las filas de la tabla wp_postmeta . El estado de la línea 14 nos permite detectar este caso particular.
¡Y eso es! Ejecutar esta consulta SQL devolverá todas las imágenes que supuestamente no se utilizan en ninguna parte de su sitio.
Ten en cuenta que al buscar imágenes huérfanas, puede haber falsos positivos. Es decir, imágenes que están marcadas como no utilizadas pero que en realidad se están utilizando en WordPress. Esto se debe a que puede usar complementos que definen sus propias tablas y mantienen allí referencias a sus imágenes. Si este es tu caso, deberás adaptar la consulta añadiendo condiciones adicionales para cubrir estos casos.
Eliminar imágenes huérfanas en WordPress
Ahora que tenemos las imágenes que potencialmente no se están utilizando en WordPress, deberíamos echar un vistazo a los resultados y ver si todas las imágenes que hemos enumerado se están utilizando o no. Dependiendo de lo que encontremos, podemos afinar la consulta añadiendo más condiciones como decíamos antes. Si todo parece correcto, puede continuar.
Para eliminar un archivo adjunto en WordPress tenemos la función wp_delete_attachment que puedes encontrar descrita aquí. Si observa la documentación, verá que esta función obtiene el identificador del archivo adjunto y un parámetro booleano que indica si desea forzar la eliminación o simplemente desecharlo.
Cuando llame a esta función en WordPress, eliminará el archivo adjunto y toda su información asociada, incluidos los posibles comentarios, la aparición en taxonomías, los metadatos relacionados y, lo que es más importante, los archivos de imagen almacenados en la carpeta wp-content .
Para obtener la lista de instrucciones wp_delete_attachment que usaremos en PHP, solo tenemos que cambiar la línea 2 de la consulta anterior para que lo que devuelva la consulta SELECT sea la cadena de caracteres que construye la instrucción que queremos. Uno para cada fila devuelta por la consulta. Puedes ver los resultados aquí:

Ahora solo tienes que copiar todas estas instrucciones y pegarlas, por ejemplo, en el archivo functions.php de tu tema y visitar tu web. Esto hará que se ejecuten estas instrucciones, eliminando las imágenes huérfanas de tu WordPress. Después de eso, elimine las instrucciones pegadas anteriores porque ya no serán necesarias.
Recuerda verificar que tu sitio web siga funcionando perfectamente y que no hayas eliminado imágenes relevantes. Si algo salió mal, no se preocupe: debe tener una copia de seguridad de su base de datos y la carpeta wp-content , por lo que debería poder restaurar su sitio web a su estado anterior.
Si tiene problemas con SQL y la base de datos, o no entendió nada de lo que he explicado aquí, primero hágamelo saber escribiendo un comentario a continuación. Después de eso, intente usar un complemento como Media Cleaner. El resultado final que obtendrás debe ser muy similar al que hemos visto en este post.
Imagen destacada de Gary Chan en Unsplash .
