WordPress: Remover e desativar revisões de posts

Desde a versão 2.6 do WordPress, há o mecanismo de revisões, que guarda na base de dados uma cópia do post (ou página) cada vez que você o salva. Isso é bom caso você precise recuperar uma versão anterior do post, para desfazer uma alteração indesejada.

Na prática, porém, nunca precisei disso.

A grande desvantagem das revisões, é que cada cópia do post que é salva na base de dados, fica lá ocupando espaço, mesmo que você nunca precise dela. E se você tem o costume de fazer como eu, de ir salvando o post várias vezes enquanto escreve, para ver como está ficando, acabará com dezenas de versões do mesmo post entulhando a base de dados.

Se você gosta das revisões, pelo menos limite o número máximo de revisões que são guardadas para cada post. Você pode dizer para o WordPress guardar somente 5 versões de cada post, que deve ser um número suficiente. Coloque esta linha no seu wp-config.php:

<?php
define('WP_POST_REVISIONS', 5);  // máx. de 5 revisões por post
?>

Agora, se você nunca usa as revisões, é bom desativá-las de uma vez por todas. Assim, nenhuma cópia adicional do post será guardada na base de dados. Basta usar a mesma linha do exemplo anterior, porém troque o número por false:

<?php
define('WP_POST_REVISIONS', false);  // revisões desligadas
?>

Tudo bem, você desligou tudo. Mas a sua base de dados ainda está cheia de revisões de todos os posts que você escreveu até hoje. É preciso removê-las para liberar espaço.

Importante: Faça um becape de sua base de dados antes de executar estes comandos!

Primeiro, um comando para listar todas as revisões de posts e páginas que estão entulhando a sua querida tabela wp_posts:

SELECT * FROM wp_posts WHERE post_type = 'revision'

Para remover todas estas revisões, há vários sites que recomendam usar uma variação do comando SQL anterior, apenas trocando select * por delete. Vai funcionar, porém não vai remover todos os meta dados que estão relacionados com estas revisões, pois eles estão em outras tabelas: wp_postmeta e wp_term_relationships.

O comando correto para remover todas as revisões, inclusive seus meta dados, é:

DELETE a,b,c
  FROM wp_posts a
  LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
  LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
  WHERE a.post_type = 'revision'

Pronto, tudo removido. Porém, o espaço ocupado por estes dados na base só vai ser liberado de fato quando você “esvaziar a lixeira”, ou seja, otimizar as tabelas:

OPTIMIZE TABLE wp_posts, wp_postmeta, wp_term_taxonomy

Eu executei agora estes comandos aqui no meu blog. Veja os resultados:

  • 349 posts de revisão foram encontrados e removidos
  • Tabela wp_posts caiu de 3.8 MB para 1.5 MB (-40%)

E aí no teu blog, como foi?

— EOF —

Gostou desse texto? Aqui tem mais.