Como remover imagens não utilizadas da sua biblioteca de mídia no WordPress

Publicados: 2019-10-15

Quando o seu site está em execução há algum tempo, é normal que existam coisas que não são mais necessárias, mas ainda existem. Um dos exemplos mais irritantes é o de imagens que não são mais usadas, mas que continuam ocupando espaço no seu WordPress.

Essas imagens que você não usa mais em seus posts ou páginas, ou em qualquer outro tipo de conteúdo que se tornou obsoleto, permanecem hospedadas em seu servidor, desperdiçando recursos e espaço de armazenamento. A melhor coisa que você pode fazer com eles é eliminá-los se você não for usá-los novamente. Mas como você pode encontrá-los e ter certeza de que eles não estão sendo usados ​​em nenhum lugar? Vamos ver isso…

Antes de começar

A primeira coisa a fazer se você deseja excluir imagens do seu WordPress que não estão mais sendo usadas é fazer uma cópia de backup do seu site, incluindo os arquivos de mídia dentro da pasta wp-content .

Embora as imagens que você carrega na biblioteca de mídia sejam armazenadas em wp-content/uploads/ , é possível que, se você usar um plug-in para carregar os arquivos, eles acabem em uma pasta diferente. Portanto, certifique-se de ter uma cópia de backup do seu banco de dados WordPress e de todos os arquivos dentro da pasta wp-content e não apenas wp-content/uploads .

Depois de criar o backup, podemos continuar com as seguintes etapas…

Detectar imagens órfãs no WordPress

Existem várias maneiras de detectar imagens que não são mais usadas em nenhum conteúdo do seu site WordPress. O mais eficaz é pesquisá-los no banco de dados do WordPress.

Para isso, devemos saber que as imagens que você carregou na biblioteca de mídia do WordPress são armazenadas na tabela wp_posts como se fossem um post ou página. O que os diferencia de outros conteúdos armazenados nesta tabela é que eles possuem o valor do anexo na coluna post_type .

Aliás, aviso importante: se você não tem conhecimento sobre bancos de dados, é melhor tomar cuidado com o que vai fazer a partir de agora, mantenha um backup do banco de dados, e confira este artigo do WordPress Codex onde eles explicam tudo em Mais detalhes.

Onde nós estávamos? Ah sim: queremos encontrar todas aquelas imagens que não estão sendo usadas no seu WordPress. Isso é mais fácil de definir do que de fazer, mas não se preocupe, vamos tentar explicar passo a passo e de forma simples.

Tudo o que precisamos fazer é escrever uma consulta em linguagem SQL para executar no banco de dados MySQL do WordPress. Se você não sabe como acessar o banco de dados do seu site, entre em contato com seu provedor de hospedagem para obter instruções sobre como fazê-lo. Se eles lhe derem acesso a um phpMyAdmin, também está tudo bem

A consulta que você precisa executar é:

Vamos decompô-lo.

A primeira coisa que fazemos é começar com uma SELECT para selecionar todas as linhas de uma tabela específica. Na linha 2, a estrela significa que queremos “todas as colunas” em cada linha.

As linhas 3 e 4 indicam a(s) tabela(s) em que estamos interessados. Neste caso, queremos selecionar os anexos do WordPress que, como eu disse, estão armazenados em wp_posts , então essa é a tabela que usaremos.

A partir da linha 5, a instrução WHERE nos permite adicionar condições para filtrar as linhas que queremos e excluir o restante. Cada condição entre as linhas 6 e 14 é separada pela instrução AND , que serve para indicar que todas as condições devem ser atendidas de uma só vez. Se uma linha não atender a todas as condições WHERE , ela não será retornada na saída da consulta SELECT .

A primeira condição na linha 6 define que queremos obter apenas as linhas cujo valor na coluna post_type é attachment . Como eu disse antes, posts e páginas são armazenados na tabela wp_posts também, entre outros conteúdos. Com esta condição obteremos apenas as imagens.

Para cada anexo , o WordPress armazena se foi carregado no contexto de uma página ou post usando a coluna post_parent . Portanto, a condição da linha 8 nos faz obter apenas os anexos cujo post_parent não existe (ou seja, eles não estão vinculados a nenhuma página ou postagem).

Por outro lado, se escolhermos uma imagem para ser a imagem em destaque de um post ou página, o WordPress cria uma linha de metadados na tabela wp_postmeta com a chave _thumbnail_id e, como valor, define o identificador da imagem do anexo . Na linha 10 da consulta obtemos aquelas imagens cujo identificador não aparece como o valor de uma linha de wp_postmeta para a chave _thumbnail_id .

A linha 12 define uma condição para filtrar imagens cuja URL não apareça no conteúdo de posts ou páginas. Ou seja, se o URL da imagem aparecer dentro do conteúdo, assumimos que a imagem ainda é útil e, portanto, não deve ser excluída. Observe que a URL da imagem aparece na coluna guid da tabela wp_posts .

Por fim, é possível que você tenha usado algum plugin que coloque a URL das imagens dentro das linhas da tabela wp_postmeta . A condição da linha 14 nos permite detectar este caso particular.

E é isso! A execução dessa consulta SQL retornará todas as imagens que supostamente não estão sendo usadas em nenhum lugar do seu site.

Lembre-se de que, ao procurar imagens órfãs, pode haver falsos positivos. Ou seja, imagens sinalizadas como não utilizadas, mas que na verdade estão sendo usadas no WordPress. Isso ocorre porque você pode usar plugins que definem suas próprias tabelas e mantêm referências às suas imagens lá. Se este for o seu caso, você deve adaptar a consulta adicionando condições adicionais para cobrir esses casos.

Remover imagens órfãs no WordPress

Agora que temos as imagens que potencialmente não estão sendo usadas no WordPress, devemos dar uma olhada nos resultados e ver se todas as imagens que listamos estão sendo usadas ou não. Dependendo do que encontrarmos, podemos refinar a consulta adicionando mais condições, como dissemos anteriormente. Se tudo parecer correto, você pode seguir em frente.

Para excluir um anexo no WordPress, temos a função wp_delete_attachment que você pode encontrar descrita aqui. Se você olhar a documentação, verá que esta função obtém o identificador do anexo e um parâmetro booleano indicando se você deseja forçar a exclusão ou apenas lixá-lo.

Quando você chama essa função no WordPress, ela exclui o anexo e todas as informações associadas, incluindo possíveis comentários, aparência em taxonomias, metadados relacionados e, o mais importante, os arquivos de imagem armazenados na pasta wp-content .

Para obter a lista de instruções wp_delete_attachment que usaremos no PHP, basta alterar a linha 2 da consulta anterior para que o que a consulta SELECT retorne seja a string de caracteres que constrói a instrução que queremos. Um para cada linha retornada pela consulta. Você pode ver os resultados aqui:

Instrução SQL para detectar imagens não utilizadas e obter o código PHP que as exclui no WordPress.
Instrução SQL para detectar imagens não utilizadas e obter o código PHP que as exclui no WordPress.

Agora basta copiar todas essas instruções e colá-las, por exemplo, no arquivo functions.php do seu tema e visitar seu site. Isso fará com que essas instruções sejam executadas, excluindo imagens órfãs do seu WordPress. Depois disso, remova as instruções coladas anteriormente, pois elas não serão mais necessárias.

Lembre-se de verificar se seu site ainda está funcionando perfeitamente e se você não excluiu imagens relevantes. Se algo der errado, não se preocupe: você deve ter um backup do seu banco de dados e da pasta wp-content , para poder restaurar seu site ao estado anterior.

Se você tiver problemas com o SQL e o banco de dados, ou não entendeu nada do que expliquei aqui, primeiro me avise escrevendo um comentário abaixo. Depois disso, tente usar um plugin como o Media Cleaner. O resultado final que você obterá deve ser muito semelhante ao que vimos neste post.

Imagem em destaque por Gary Chan no Unsplash .