add_rewrite_rule( '^offres-speciales/?$', 'index.php?pagename=offres-speciales', 'top' ); — cette ligne, à elle seule, ne résout rien. Elle capture une URL, rien de plus. C’est la suite qui compte : comment faire pointer cette URL vers un gabarit précis de l’éditeur de site expérimental, sans passer par la hiérarchie de templates habituelle.
Ce billet ne traite pas de la hiérarchie de templates classique — celle qui va de page-{slug}.php à page.php puis index.php. Il s’adresse à qui doit faire correspondre une URL particulière, qui ne colle à aucune règle standard, à un gabarit précis parmi ceux stockés comme contenu éditable dans le plugin Gutenberg.
Le problème posé par une URL hors norme
La hiérarchie de templates de WordPress fonctionne très bien tant que l’URL correspond à un objet identifiable : une page, un article, une taxonomie. Mais certaines URL n’ont pas d’objet associé — une page de renvoi temporaire, un alias marketing, une redirection interne qui doit malgré tout afficher un contenu structuré. Dans ce cas, il faut sortir du cadre standard.
La Rewrite API, disponible depuis longtemps dans WordPress, permet justement de capturer une URL arbitraire et de la faire passer par le point d’entrée principal, sans dépendre d’un objet de contenu préexistant.
Capturer l’URL avec add_rewrite_rule
La première étape consiste à enregistrer une règle de réécriture au moment de l’initialisation :
add_action( 'init', function() {
add_rewrite_rule(
'^offres-speciales/?$',
'index.php?offre_speciale=1',
'top'
);
} );
add_filter( 'query_vars', function( $vars ) {
$vars[] = 'offre_speciale';
return $vars;
} );

Une fois la règle enregistrée, il reste une étape indispensable : vider les règles de réécriture. Un simple passage par la page Réglages > Permaliens suffit en développement ; en production, un appel à flush_rewrite_rules() déclenché lors de l’activation d’une extension est plus sûr.
Choisir le gabarit avec template_include
Une fois l’URL capturée, il faut décider quel gabarit afficher. Le filtre template_include, présent dans WordPress depuis ses premières versions, permet d’intercepter ce choix avant que le thème actif ne prenne la main :
add_filter( 'template_include', function( $template ) {
if ( get_query_var( 'offre_speciale' ) ) {
// Ici, on oriente vers le gabarit expérimental
// stocké comme contenu éditable dans le plugin Gutenberg.
return locate_template( 'offre-speciale.php' ) ?: $template;
}
return $template;
} );
Dans un contexte où le plugin Gutenberg gère déjà des gabarits comme des contenus éditables plutôt que comme de simples fichiers, la logique reste la même : on ne cherche plus un fichier PHP par convention de nom, mais un contenu structuré identifié par un slug précis, que l’on va récupérer via une requête sur le post type dédié aux gabarits.
Un cas d’usage concret
- Une campagne publicitaire pointe vers une URL courte et mémorisable, sans lien avec la structure du site.
- Le contenu affiché doit rester modifiable par une personne non technique, donc géré comme un gabarit éditable plutôt que comme un fichier figé.
- Le routage doit survivre à une réorganisation ultérieure des pages, sans dépendre de leur identifiant.
Ce triptyque de contraintes justifie de sortir de la hiérarchie standard : elle n’a simplement pas été conçue pour ce cas de figure.
Les limites à connaître
Cette approche a un coût : chaque règle ajoutée complexifie légèrement le traitement des URL, et un oubli de purge des règles de réécriture après une modification peut laisser croire qu’une modification n’a « pas fonctionné », alors qu’elle attend simplement d’être prise en compte.
Une règle de réécriture non purgée est l’une des causes de bug les plus frustrantes à diagnostiquer, car le code est pourtant correct : il attend juste que WordPress régénère sa table de correspondance.
Par ailleurs, ce mécanisme reste indépendant de la maturité du plugin Gutenberg : que l’éditeur de site expérimental évolue ou change de nom au fil des versions ne change rien au fonctionnement de la Rewrite API elle-même, qui appartient au cœur stable de WordPress depuis longtemps.
Pour aller plus loin
Router une URL vers un gabarit expérimental n’a rien de spectaculaire techniquement : trois éléments suffisent, une règle de réécriture, une query var, et un filtre sur le gabarit chargé. La difficulté est ailleurs, dans la rigueur à appliquer lors des mises à jour de règles, et dans la prudence à garder tant que le système de gabarits éditables reste, à ce stade, une fonctionnalité expérimentale du plugin.