Como posso excluir em lote todas as imagens não conectadas com o WP-CLI ou outro processo automatizado?

4

Depois de usar o WPML Media, um plug-in que cria duplicatas de cada imagem para cada idioma, agora temos quase 100.000 imagens duplicadas que não vamos usar e de que precisamos nos livrar.

Precisamos não apenas deletá-los do próprio sistema de arquivos, mas também ter certeza de que apagamos todas as referências no banco de dados como normalmente aconteceria se alguém as apagasse manualmente através da galeria de mídia.

Estou procurando uma solução WP-CLI, se for possível. Essa solução foi muito útil, mas faz todas as imagens, não apenas aquelas que não são conectadas / usadas no sistema.

Como posso excluir em massa mídia e anexos usando o WP-CLI?

Dada outra solução, o OP colocou nos comentários que ele alcançou sua solução, em última instância, com SQL.

Como eu excluo milhares de imagens não conectadas?

Não sou estranho na linha de comando ou no mysql, mas não estou familiarizado o suficiente com as tabelas do WP para criar uma consulta para manter a integridade do banco de dados. Se você estiver, então sugira uma solução relacionada a banco de dados puro, ou script PHP que se conecte ao sistema e faça as coisas da maneira "wordpress".

Eu não estou procurando uma solução baseada em plugins. Eu tentei DNUI, DX Delete Attached Media e uma pontuação de outros que todos terminaram mal.

ATUALIZAÇÃO: Usar "pai = 0" para determinar se uma imagem foi anexada ou não foi uma solução muito inteligente, e eu a marquei como a resposta.

Existe uma maneira de usar legitimamente uma imagem em um post e o pai ainda é igual a 0; é quando você visita os detalhes da imagem na biblioteca de mídia e copia a URL da fonte da imagem completa para ser colada manualmente em uma postagem. A solução da resposta aceita também os excluirá. Por isso, gostaria de incentivar outras soluções também que levariam isso em consideração.

Isso talvez exija a varredura do banco de dados para encontrar instâncias do nome da imagem, talvez semelhante ao algoritmo que o wp-cli search-replace usaria?

    
por user658182 07.04.2017 / 15:49

1 resposta

5

Você pode tentar essa modificação (não testada) na resposta à qual vinculou @something

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

para excluir anexos sem pais .

Para segmentar um determinado mime type , por ex. image/jpeg try:

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

Notas:

  • Lembre-se de fazer backup primeiro antes de testar!

  • Imagens não anexadas ainda podem ser usadas no conteúdo da postagem ou por exemplo em widgets.

por birgire 07.04.2017 / 16:49