¿Cómo puedo eliminar por lotes todas las imágenes no adjuntas con WP-CLI u otro proceso automatizado?

4

Después de usar WPML Media, un complemento que crea duplicados de cada imagen para cada idioma, ahora tenemos casi 100,000 imágenes duplicadas que no vamos a usar y debemos eliminar.

No solo debemos eliminarlos del propio sistema de archivos, sino que también debemos asegurarnos de que se eliminen todas las referencias en la base de datos, como ocurre normalmente si se eliminaran manualmente a través de la galería de medios.

Estoy buscando una solución WP-CLI, si es posible. Esta solución fue muy útil, pero lo hace con todas las imágenes, no solo con aquellas que no están conectadas / sin usar dentro del sistema.

¿Cómo puedo realizar una eliminación masiva? ¿Medios y archivos adjuntos utilizando WP-CLI?

Dada otra solución, el OP puso en los comentarios que él logró su solución en última instancia con SQL.

¿Cómo elimino miles de imágenes no adjuntas?

No soy ajeno a la línea de comandos o mysql, pero no estoy lo suficientemente familiarizado con las tablas WP para crear una consulta para mantener la integridad de la base de datos. Si es así, sugiera una solución puramente relacionada con la base de datos, o un script PHP que se enganche en el sistema y haga las cosas a la manera de "wordpress".

No estoy buscando una solución basada en complementos. He probado DNUI, DX Delete Attached Media y una puntuación de otros que terminaron mal.

ACTUALIZACIÓN: Usar "parent = 0" para determinar si una imagen está adjunta o no fue una solución muy inteligente, y la marqué como respuesta.

Hay una manera de usar legítimamente una imagen en una publicación y el padre aún es igual a 0; ahí es cuando visita los detalles de la imagen en la biblioteca de medios, y copia la URL de la fuente de la imagen completa para pegarla manualmente en una publicación. La solución de la respuesta aceptada también los eliminará. Por eso, me gustaría animar a otras soluciones que tomen esto en consideración.

Eso quizás requiera escanear la base de datos para encontrar instancias del nombre de la imagen, tal vez similar al algoritmo que usaría wp-cli search-replace?

    
pregunta user658182 07.04.2017 - 15:49

1 respuesta

5

Puede probar esta modificación (no probada) de la respuesta a la que lo vinculó mediante @something

wp post delete $(wp post list --post_type='attachment' --format=ids --post_parent=0)

para eliminar archivos adjuntos sin padres .

Para segmentar un mime type dado, p. ej. image/jpeg try:

wp post delete $(wp post list --post_type='attachment' \
    --format=ids --post_parent=0 --post_mime_type='image/jpeg')

Notas:

  • ¡Recuerde hacer una copia de seguridad primero antes de probar!

  • Las imágenes no adjuntas aún se pueden usar en el contenido de la publicación o, por ejemplo, en widgets.

respondido por el birgire 07.04.2017 - 16:49

Lea otras preguntas en las etiquetas