¿Cómo elimino todas las imágenes NO UTILIZADAS de mi directorio de uploads?
Estoy tratando de limpiar mis carpetas de uploads ya que están empezando a ocupar demasiado espacio en mi servidor.
He intentado usar plugins para lograr este objetivo como DNUI y Cleanup Images, pero estos plugins son inoperables o en el caso de DNUI (que se ha actualizado recientemente y funciona) no logran exactamente los resultados que busco. Esto se debe a que mi sitio usa WooCommerce y un tema que utilizan imágenes en otros lugares además de solo entradas o páginas, como encabezados, pies de página y galerías. Parece que WC usa su propio plugin Lightbox incorporado llamado Pretty Photo, que es donde se llaman las imágenes que DNUI marca como "no utilizadas".
Sé que es bastante pedir, pero me pregunto si alguien podría orientarme en la dirección correcta. No soy desarrollador, así que probablemente ni siquiera debería estar publicando aquí, pero puedo resolver las cosas con tiempo y determinación. He visto scripts en este sitio que logran los mismos resultados que el plugin DNUI, pero nada que tenga en cuenta otros usos de imágenes (¿si es que es posible?). Cualquier ayuda sería muy apreciada.

Eliminar imágenes usando un plugin:
Puedes usar este plugin, el cual buscará en tu base de datos y verificará si la imagen está insertada en algún post (en el contenido, como imagen destacada, en cualquier campo personalizado, en cualquier lugar...) o como fondo...
Si la imagen no se usa en ningún lado, te dará la opción de eliminarla. Obtendrás una lista de todas las imágenes en tu sitio que ya no se usan, para que puedas eliminarlas de forma segura.
https://wordpress.org/plugins/dnui-delete-not-used-image-wordpress/
Y este también funciona, aunque está desactualizado
https://wordpress.org/plugins/wordpress-uploaded-files-cleaner/
Eliminar imágenes manualmente:
También puedes buscar en tu biblioteca de medios las imágenes que no están adjuntas a posts o páginas.
Ve a la biblioteca de medios y haz clic en "no adjuntas". Mostrará todas las imágenes que pueden aparecer en otras partes de tu sitio o que no se usan.

El problema con las imágenes que no están adjuntas a ninguna publicación es que pueden usarse en otro lugar; por ejemplo, si tienes un campo personalizado que utiliza un cargador de imágenes basado en el cargador de medios nativo de WordPress, dependiendo de cómo esté codificado el tema, la imagen cargada allí no está adjunta a ninguna publicación (en tu base de datos). Aún así, es una idea válida.

Tareas programadas (Cron) y un rastreo de la base de datos son tus aliados
Tendría que ser un plugin, incluso podrías asignarle un intervalo wp_cron, no muy diferente al sugerido anteriormente pero con la adición de verificar cualquier campo tipo 'post_content' (necesitarás identificarlos, dependiendo de tu entorno WordPress) en busca de la URI/URL de la imagen. Esto tiene el potencial de ser extremadamente lento/consumidor de recursos para los procesos del sistema - en la práctica este proceso solo necesitaría ejecutarse una vez al día o a la semana - asumiendo que no hay otras razones legales/empresariales para hacerlo con más frecuencia.
Una configuración de base de datos maestro-esclavo de la fuente permitiría que este proceso afecte mucho menos el rendimiento, pero eso va más allá del alcance de esta pregunta creo.

Probé el plugin Limpieza de Imágenes y es el mejor, aunque siempre es bueno hacer una copia de seguridad primero.

Necesitarías escanear tu carpeta wp-content/uploads
en busca de archivos subidos, luego tu base de datos para encontrar referencias a esos archivos, y finalmente emparejarlos. Lo que no se pueda emparejar debería ser seguro de eliminar.
El escaneo de la base de datos es la parte complicada. La mayoría de las referencias a archivos se almacenan dentro de la Biblioteca Multimedia a la que puedes acceder usando las funciones/API estándar de WordPress. Pero ¿qué pasa con los archivos que se eliminan de la Biblioteca Multimedia pero que siguen siendo referenciados por publicaciones? ¿O archivos a los que otros plugins enlazan de diferentes maneras?
Realicé un número considerable de pruebas y según lo que observé, todas las referencias a archivos se almacenan ya sea en formato de texto plano (es decir, simplemente una celda de tabla igual a la ruta o URL del archivo), formato HTML (es decir, el contenido de una publicación), como datos serializados, o finalmente como objetos JSON. Tendrías que escanear toda la base de datos e intentar adivinar qué formato se usa dentro de cada celda. Por supuesto, podrían existir otras formas exóticas que algunos plugins usan para mantener referencias a sus archivos, pero esos solo se pueden manejar caso por caso.
En consecuencia, escribí un plugin que automáticamente hace todo eso, ya que lo necesitaba para algunos sitios web de nuestros clientes, y lo llamé Theia Upload Cleaner. Ha funcionado bien para mí, pero por supuesto siempre deberías hacer una copia de seguridad antes de intentar algo como esto.

Buena estrategia... me pregunto si has encontrado algún problema con ella a medida que se añade más contenido/plugins/entradas con el tiempo...

Hay problemas aquí y allá, sí. Por ejemplo, para algunos plugins necesitas excluir ciertas tablas que de otra forma pueden ralentizar considerablemente el proceso. Intentamos excluir automáticamente por ciertas palabras clave, como tablas de "log", pero por supuesto no detecta todos los casos.

El plugin Media Cleaner para WordPress es bastante bueno - https://wordpress.org/plugins/media-cleaner/
Me gusta porque tiene soporte para otros plugins como Advanced Custom Fields (ACF), Divi Builder, Visual Composer y Elementor. (Solo en la versión de pago)
