Conflit de règles de réécritures ? Suivez le (petit) guide
Il peut arriver que vous ayez besoin d’avoir à la fois un terme de catégorie (ou tout autre taxonomie) et une page qui a le même nom, même slug ou identifiant.
Pour 2 pages ou 2 termes, cela ne pose pas de soucis à WordPress car il va vous forcer à ajouter le fameux « -2 » en fin d’URL. Mais dans le cas de types de contenus différents, c’est un autre problème.
Riryte roul’z?
Regardons rapidement ces règles de réécritures. Déjà, il faut savoir qu’elles se trouvent dans la base de données dans l’entrée « rewrite_rules » sous forme d’un tableau sérialisé (serialized array).
Pour les voir de cette façon dans l’interface de WordPress, j’utilise l’extension « Rewrite Rules Inspector » créée par Automattic & Daniel Bachhuber (des valeurs sûres !).
On peut donc filtrer par type, mot clé etc, ici j’ai choisi d’y mettre ma page « /partenaires« , 3 résultats donc.
Le problème
Mon soucis ici est que la règle des pages arrive en priorité après la règle de mon développement sur les « partenaires ». Dans le code de cette déclaration, il y a fort à parier que la priorité a été mise par défaut à « top », la plus haute et donc va prendre la main, chose que je regrette.
Alors je peux modifier mon développement, et demander un Flush de ces règles en visitant simplement la page des permaliens ou en cliquant sur « Flush Rules » dans la page du plugin cité.
Mais imaginons que ce n’est PAS mon dev, et/ou que je ne peux pas le retoucher. C’est un cas qui m’est déjà arrivé, et qui vous arrive (sinon vous ne seriez pas là n’est-ce pas ?).
Les solutions
Il existe alors plusieurs solutions pour y remédier :
La base de données
On peut directement aller modifier le tableau en base pour remettre au dessus notre règle. Mais au prochain flush, il y a de fortes chances que ça revienne dessous, et puis, modifier un array directement en bas est risqué…
Le dev
Avec un peu de code on peut réécrire notre règle avec la prio 1 et forcer un flush et ça à chaque chargement de page du site, ok bon donc non, on évite ça, les perfs vont être horribles.
Le bon dev
Avec un peu de code et de réflexion, on ne va le faire que lorsque les règles sont flush ! Comme ça, les perfs sont OK, et si ça bouge, on reste dessus. Utilisons le hook « rewrite_rules_array« .
J’utilise un array pour $priority_rules comme ça je peux en mettre plusieurs, je les mets dans l’order des priorités que je souhaite (je fais un array_reverse() après !) et voilà.
Je vais donc aller chercher si la règle que je veux faire remonter existe, si oui, je l’enlève puis je concatène ma règle avec le reste du tableau.
Une fois ce code mis en place (dans un mu-plugin par exemple), je refais un Flush Rules et…
C’est tout !
Vous aimez ? Partagez !
Partager la publication « Conflit de règles de réécritures ? Suivez le (petit) guide »
Réagir à cet article