🧹 Limpeza Profunda do Banco de Dados WordPress
Objetivo: Remover “sujeira” (dados órfãos, revisões antigas, transients expirados, caches desnecessários) que podem deixar o site lento ou causar comportamentos estranhos, como a desformatação de shortcodes .
Atenção: Sempre faça um backup completo (banco de dados + arquivos) antes de executar qualquer comando SQL. Esta aula é para administradores experientes.
📌 Comandos SQL para limpeza em um site WordPress normal
Conecte-se ao phpMyAdmin (ou outra ferramenta) e execute os comandos abaixo, um por um, na tabela correspondente ao seu banco de dados.
| Ação | Comando SQL (executar no phpMyAdmin) | O que faz |
|---|---|---|
| Remover revisões antigas de posts | DELETE FROM wp_posts WHERE post_type = 'revision'; |
Apaga todas as revisões de posts e páginas, liberando espaço e eliminando metadados associados (reduz a tabela wp_posts). |
| Remover posts na lixeira (trash) | DELETE FROM wp_posts WHERE post_status = 'trash'; |
Elimina definitivamente os posts que estavam na lixeira. |
| Remover metadados órfãos (postmeta) | DELETE pm FROM wp_postmeta pm LEFT JOIN wp_posts p ON p.ID = pm.post_id WHERE p.ID IS NULL; |
Apaga metadados que pertencem a posts que já foram excluídos. Esses “órfãos” acumulam lixo e lentidão. |
| Remover comentários não aprovados e spam | DELETE FROM wp_comments WHERE comment_approved IN ('0', 'spam', 'trash'); |
Limpa comentários pendentes, spam e lixeira de comentários. |
| Remover metadados de comentários órfãos | DELETE cm FROM wp_commentmeta cm LEFT JOIN wp_comments c ON c.comment_ID = cm.comment_id WHERE c.comment_ID IS NULL; |
Elimina metadados de comentários que não existem mais. |
| Limpar transients expirados (opções temporárias) | DELETE FROM wp_options WHERE option_name LIKE '_transient_timeout_%' OR option_name LIKE '_transient_%'; |
Remove todas as opções de cache transitório (transients) – dados temporários de plugins que não são mais necessários. |
| Remover cache oEmbed órfão | DELETE FROM wp_postmeta WHERE meta_key LIKE '_oembed_%'; |
Limpa o cache de incorporações (oEmbed) que pode estar corrompido ou desatualizado – útil para resolver problemas com . |
| Otimizar todas as tabelas (reorganizar espaço) | OPTIMIZE TABLE wp_posts, wp_postmeta, wp_options, wp_comments, wp_commentmeta, wp_terms, wp_termmeta; (adicione outras tabelas se desejar) |
Reorganiza o armazenamento físico das tabelas, recuperando espaço e melhorando a performance (executar após limpeza). |
🌐 Adaptação para Multisite (rede de blogs)
No Multisite, cada blog tem suas próprias tabelas com o prefixo wp_ID_do_blog_ (ex: wp_2_posts, wp_2_postmeta). Além disso, existem tabelas globais (como wp_sites, wp_blogs, wp_signups).
Para limpar todos os blogs de uma vez, use um plugin como WP-Sweep (ativado em rede). Ele varre todas as tabelas automaticamente.
Se preferir executar comandos SQL manuais por blog, repita os comandos acima trocando o prefixo wp_ pelo prefixo de cada blog. Exemplo para o blog com ID 2:
DELETE FROM wp_2_postmeta WHERE meta_key LIKE '_oembed_%';
DELETE FROM wp_2_options WHERE option_name LIKE '_transient_%';
DELETE FROM wp_2_posts WHERE post_type = 'revision';
-- etc.
Além disso, você pode limpar as tabelas globais do Multisite:
| Ação | Comando SQL (global) | O que faz |
|---|---|---|
| Remover blogs marcados como “excluídos” (deleted = 1) | DELETE FROM wp_blogs WHERE deleted = 1; |
Elimina permanentemente blogs que foram excluídos da rede. |
| Remover registros de signup órfãos | DELETE FROM wp_signups WHERE active = 0 AND registered < DATE_SUB(NOW(), INTERVAL 30 DAY); |
Limpa registros de inscrições pendentes com mais de 30 dias. |
| Remover metadados de sites órfãos | DELETE sgm FROM wp_sitemeta sgm LEFT JOIN wp_blogs b ON b.blog_id = sgm.site_id WHERE b.blog_id IS NULL; |
Apaga metadados de sites que não existem mais na rede. |
🔧 Comando PHP para limpeza profunda via WP-CLI (alternativa avançada)
Se você tem acesso SSH e o WP-CLI instalado, pode executar uma limpeza ainda mais completa com um único comando (aplicável a todo o Multisite):
# Limpar revisões de posts de todos os blogs da rede
wp post delete --force --revisions --network
# Limpar transients expirados da rede
wp transient delete --all --network
# Limpar cache oEmbed de todos os blogs
wp post meta delete --all --meta-key=_oembed_* --network
# Otimizar todas as tabelas do banco de dados
wp db optimize
Esses comandos são executados no terminal do servidor (ex: DreamHost SSH).
📖 Resumo do que cada ação elimina (para seu caderno)
- Revisões e lixeira: Versões antigas de posts/páginas que ocupam espaço e podem conter metadados desnecessários.
- Metadados órfãos: Campos personalizados (postmeta, commentmeta, termmeta, usermeta) cujo objeto pai (post, comentário, termo, usuário) foi excluído. Esses são os principais vilões da lentidão e de comportamentos estranhos.
- Transients expirados: Dados temporários de plugins que o WordPress deveria limpar sozinho, mas muitas vezes acumulam.
- Cache oEmbed: Respostas salvas de serviços externos (YouTube, Twitter, etc.). Pode ficar corrompido e atrapalhar o shortcode
. - Otimização de tabelas: Libera espaço físico no disco e reorganiza os índices.
✅ Próximos passos recomendados para o seu caso
- Faça um backup completo (banco + arquivos).
- Instale e ative o plugin WP-Sweep em rede.
- Execute a limpeza de Post Meta, oEmbed Cache e Transients pelo painel da rede (Ferramentas → Sweep).
- Após a limpeza, recarregue os posts que usam
e verifique se o comportamento de desformatação persiste. - Se o problema continuar, restaure o backup e execute comandos SQL manuais (um por um) para identificar a causa raiz.
Lembre-se: Manutenção preventiva a cada 3-6 meses evita acúmulo de sujeira e mantém o site leve e rápido.
Esta aula foi gerada com base nas experiências e tentativas de resolver a desformatação do shortcode no Multisite Portanova. A limpeza profunda do banco de dados é uma das práticas mais subestimadas e eficazes.