Sur un site d’actualités qui publie une quinzaine d’articles par jour depuis plus de quatre ans, un examen de la base de données a révélé un chiffre qui a surpris tout le monde en réunion : plus de quarante mille lignes dans la table wp_posts correspondaient uniquement à des révisions d’articles, contre à peine six mille articles réellement publiés. La table des révisions pesait, à elle seule, presque sept fois plus lourd que le contenu éditorial réel du site.
Deux réglages, tous deux définissables dans wp-config.php, permettent de reprendre le contrôle sur cette croissance : WP_POST_REVISIONS pour les révisions d’articles, et EMPTY_TRASH_DAYS pour la durée de conservation des contenus mis à la corbeille.
Comprendre le comportement par défaut
Sans configuration explicite, WordPress conserve un nombre illimité de révisions pour chaque article, créées à chaque enregistrement automatique ou manuel. La corbeille, elle, vide automatiquement son contenu après trente jours via une tâche cron planifiée, ce qui convient à de nombreux sites mais reste arbitraire selon le contexte.

Limiter le nombre de révisions conservées
// Dans wp-config.php, avant la ligne "That's all, stop editing!"
define( 'WP_POST_REVISIONS', 10 );
Cette constante limite le nombre de révisions conservées par article à dix, les plus anciennes étant automatiquement supprimées à mesure que de nouvelles sont créées. Pour désactiver complètement les révisions, ce qui reste rarement recommandé car cela prive l’équipe éditoriale de tout retour en arrière possible, la valeur false convient :
define( 'WP_POST_REVISIONS', false ); // à réserver aux cas très spécifiques
Attention : cette constante n’a aucun effet rétroactif sur les révisions déjà enregistrées en base de données. Un nettoyage manuel ou via WP-CLI reste nécessaire pour purger l’historique existant avant que le nouveau réglage ne produise son plein effet.
Purger les révisions existantes avec WP-CLI
wp post list --post_type=revision --format=ids | xargs -n 20 wp post delete --force
Cette commande liste les identifiants de toutes les révisions existantes puis les supprime par lots de vingt, une précaution utile pour éviter de surcharger la ligne de commande sur un site comptant plusieurs dizaines de milliers de révisions accumulées.
Ajuster la durée de conservation de la corbeille
define( 'EMPTY_TRASH_DAYS', 7 ); // une semaine plutôt que trente jours
Pour un site où le volume de suppressions est important, comme une boutique en ligne qui retire régulièrement des fiches produit obsolètes, réduire cette durée limite la taille de la corbeille active. À l’inverse, sur un site sensible où une suppression accidentelle serait particulièrement problématique, une durée plus longue, voire une valeur à 0 couplée à une politique de sauvegarde renforcée, peut se justifier :
define( 'EMPTY_TRASH_DAYS', 0 ); // vidage immédiat, à réserver aux sites avec sauvegardes fiables
Trouver le bon compromis selon le profil du site
| Profil de site | WP_POST_REVISIONS recommandé | EMPTY_TRASH_DAYS recommandé |
|---|---|---|
| Site d’actualités à fort volume | 5 à 10 | 7 |
| Site vitrine peu mis à jour | Valeur par défaut (illimité) | 30 (valeur par défaut) |
| Boutique e-commerce avec catalogue mouvant | 10 | 14 |
| Documentation technique collaborative | 20, pour tracer les évolutions | 30 |
Le bon réglage n’est jamais universel : il dépend directement du rythme de publication et de la tolérance du client au risque de perte définitive d’un contenu supprimé par erreur.
Ce que ce réglage ne remplace pas
Ajuster ces deux constantes réduit la croissance de la base de données, mais ne remplace en rien une vraie stratégie de gestion des révisions au quotidien pour l’équipe éditoriale, qui implique des pratiques et des outils propres à la rédaction, déjà traités séparément sur ce blog.
En résumé
WP_POST_REVISIONS et EMPTY_TRASH_DAYS, définies dans wp-config.php, permettent d’adapter finement la conservation des révisions et des contenus supprimés au profil réel de chaque site, plutôt que de subir des valeurs par défaut pensées pour convenir à tout le monde sans vraiment convenir à personne.