« La documentation officielle du Codex précise que WP_POST_REVISIONS accepte trois formes : un booléen ou un entier », rappelle la page dédiée aux constantes de configuration. Cette formulation simple cache une constante dont le comportement exact mérite d’être compris avant d’écrire la moindre routine de sauvegarde personnalisée dans une extension.
Définie dans wp-config.php, cette constante contrôle combien de versions antérieures d’un contenu WordPress conserve automatiquement. Une extension qui enregistre ses propres versions d’un contenu, par exemple pour un système d’approbation éditoriale, doit composer avec cette limite plutôt que la contourner.
Les trois valeurs possibles et leurs effets
true(valeur par défaut si la constante n’est pas définie) : nombre de révisions illimitéfalse: aucune révision n’est enregistrée, la fonctionnalité est désactivée- Un entier positif, par exemple
5: WordPress conserve au maximum ce nombre de révisions par contenu, en supprimant les plus anciennes
// Dans wp-config.php
define( 'WP_POST_REVISIONS', 5 );
Comment WordPress applique la limite en interne
La fonction wp_save_post_revision(), appelée automatiquement à chaque enregistrement d’un contenu qui supporte les révisions, lit cette constante via wp_revisions_to_keep() avant de décider s’il faut créer une nouvelle révision et, le cas échéant, en supprimer une plus ancienne pour respecter la limite.
$nombre_max = wp_revisions_to_keep( $post );
if ( 0 === $nombre_max ) {
return;
}
Ce filtre wp_revisions_to_keep constitue d’ailleurs le point d’extension officiel si une extension a besoin d’ajuster la limite pour un type de contenu précis, sans toucher à la constante globale qui s’applique à l’ensemble du site :
add_filter( 'wp_revisions_to_keep', function( $nombre, $post ) {
if ( 'contrat' === $post->post_type ) {
return 20;
}
return $nombre;
}, 10, 2 );

Ce qu’une routine maison ne doit pas faire
Une extension qui construit son propre mécanisme de versionnage, par exemple pour horodater des snapshots d’un contenu avant une action métier particulière, tombe parfois dans le piège d’insérer directement des lignes dans la table wp_posts avec post_type => 'revision', en ignorant la limite configurée. Cela crée deux problèmes distincts.
Une incohérence entre deux sources de vérité
Si une extension insère ses propres révisions sans passer par wp_save_post_revision(), l’écran natif de comparaison des révisions affiche un mélange de versions générées par WordPress et par l’extension, sans que la limite configurée s’applique de façon homogène aux deux origines.
Un nettoyage qui ne se déclenche jamais
Le nettoyage automatique des révisions excédentaires repose sur le passage par les fonctions natives. Des révisions insérées directement en base, en dehors de ce circuit, s’accumulent indéfiniment, même si la constante limite le nombre à cinq pour les révisions générées normalement.
La bonne pratique : passer par wp_save_post_revision ou vérifier soi-même
$revision_id = wp_save_post_revision( $post_id );
if ( $revision_id ) {
update_post_meta( $revision_id, 'wpm_declencheur', 'validation_editoriale' );
}
Réutiliser wp_save_post_revision() garantit que la limite configurée dans wp-config.php, ou ajustée via le filtre, s’applique de façon uniforme, tout en profitant de l’écran de comparaison natif pour retrouver ces versions plus tard.
| Approche | Respecte la limite | Visible dans l’écran natif |
|---|---|---|
| wp_save_post_revision() | Oui | Oui |
| Insertion directe en base | Non, sauf code additionnel | Partiellement |
| Table personnalisée dédiée | Sans objet | Non, écran séparé requis |
Avant d’écrire une ligne de code pour versionner un contenu, la première question à se poser est si le mécanisme natif de révisions, avec son filtre d’ajustement, ne couvre pas déjà le besoin.
En résumé
WP_POST_REVISIONS n’est pas qu’un réglage de configuration à ignorer une fois défini : c’est une limite que toute routine de sauvegarde personnalisée doit respecter, soit en réutilisant les fonctions natives, soit en appliquant sa propre limite cohérente si une table dédiée est réellement justifiée par le besoin.