« La révision demandée n’existe plus. » Ce message, familier à qui a déjà navigué dans l’historique de révisions d’un article WordPress, réapparaît parfois là où on ne l’attend pas : dans l’historique d’un gabarit de l’éditeur de site expérimental, alors qu’une modification récente semblait pourtant avoir été enregistrée correctement.
Ce billet ne traite pas des révisions des styles globaux, qui suivent un mécanisme distinct. Il se concentre sur les révisions des gabarits eux-mêmes, stockés dans le post type wp_template, et sur ce qui peut expliquer la disparition d’une ancienne version.
Symptôme
En ouvrant l’historique d’un gabarit modifié plusieurs fois au cours des dernières semaines, seule la version la plus récente apparaît, alors que plusieurs modifications intermédiaires avaient été effectuées. Tenter d’accéder directement à une ancienne révision par son identifiant, via une URL construite manuellement, affiche le message « La révision demandée n’existe plus ».
Diagnostic
Le post type wp_template déclare le support des révisions au même titre que n’importe quel article, ce qui signifie que chaque modification d’un gabarit devrait, en théorie, générer une nouvelle entrée de révision, stockée elle aussi dans la table des articles avec un statut particulier.
wp post list --post_type=wp_template --fields=ID,post_title,post_status
Cette commande WP-CLI liste les gabarits existants. Une commande complémentaire permet de vérifier les révisions réellement conservées :
wp post list --post_type=revision --post_parent=142 --fields=ID,post_date
Sur le site concerné, cette seconde commande ne retourne aucune ligne, alors que plusieurs modifications avaient été effectuées sur le gabarit d’identifiant 142. Les révisions ont bel et bien été supprimées, pas simplement rendues inaccessibles depuis l’interface.

La cause identifiée
L’enquête mène vers une extension de nettoyage de base de données, installée depuis plusieurs mois, configurée pour supprimer automatiquement toute révision d’article de plus de sept jours. Cette extension n’a pas été pensée avec les gabarits en tête, et applique sa règle de nettoyage indifféremment à tous les post types supportant les révisions, y compris wp_template.
- Une règle de nettoyage générique ne distingue pas un article d’un gabarit.
- Un gabarit modifié rarement peut voir toutes ses révisions supprimées avant même qu’un besoin de retour en arrière ne se manifeste.
- L’interface de l’éditeur de site expérimental n’avertit pas explicitement de cette suppression silencieuse.
Correctif
La solution la plus directe consiste à exclure explicitement le post type wp_template, ainsi que wp_template_part, des règles de nettoyage automatique de l’extension concernée. La plupart des extensions de ce type proposent un réglage listant les post types concernés par le nettoyage ; il suffit d’en retirer ces deux entrées.
add_filter( 'nettoyage_revisions_post_types', function( $types ) {
return array_diff( $types, array( 'wp_template', 'wp_template_part' ) );
} );
Ce filtre, propre à l’extension utilisée dans ce cas précis, illustre le principe général : toute règle de nettoyage automatisée doit explicitement épargner les gabarits, sous peine de priver l’équipe d’un filet de sécurité pourtant utile.
Prévention
Avant d’installer toute extension de nettoyage de base de données sur un site utilisant l’éditeur de site expérimental, il devient nécessaire de vérifier explicitement son comportement vis-à-vis des post types de gabarits. Un test sur un environnement de développement, en modifiant un gabarit plusieurs fois puis en vérifiant la persistance de ses révisions après une semaine, permet de détecter le problème avant qu’il ne touche un site en production.
Un mécanisme de nettoyage conçu pour les articles ne doit jamais être appliqué aveuglément aux gabarits : ce sont deux usages qui, malgré une structure de données commune, méritent des règles de conservation différentes.
En résumé
La disparition de révisions d’un gabarit trouve rarement son origine dans l’éditeur de site expérimental lui-même, mais plutôt dans des mécanismes de nettoyage périphériques mal calibrés. Vérifier les réglages de toute extension de nettoyage de base de données, et y exclure explicitement les post types de gabarits, évite ce type de mésaventure.