[WordPress] URLs propres et templates personnalisés

Sur un de nos projets, nous venons d’être confrontés à la problématique suivante : comment avoir des jolies URLs et passer des paramètres d’URLs à des modèles de page ?

L’exemple est le suivant :

Nos URLS doivent être au final de la forme :
/produit/bidule
mais appeler en sous-marin les URLs de la forme
/produit?prod=bidule (ou /index.php?pagename=produit&prod=bidule)

On pourrait passer assez simplement par la réécriture d’URL d’Apache avec une règle du type :

RewriteRule ^/produit/(.+)?$ /produit?prod=$1 [L]

Mais la gestion des variables d’URL et des noms de page de WordPress empêchera le bon fonctionnement (on aura une 404 en retour).

Il est possible de passer par le système natif des règles de réécriture d’URL :

/* On déclare les variables à faire gérer dans les URLs par WordPress */
function custom_products_rewrite_tag() {
add_rewrite_tag('%prod%', '([^&]+)');
}
add_action('init', 'custom_products_rewrite_tag', 10, 0);


/* On indique ensuite la règle de réécriture, en utilisant le slug de la page cible, pour éviter d'utiliser l'ID */
function custom_products_rewrite_rule() {
add_rewrite_rule('^produit/(.+)/?','index.php?pagename=produit&prod=$matches[1]','top');
}
add_action('init', 'custom_products_rewrite_rule', 10, 0);

ATTENTION : la variable « prod » n’est pas récupérable directement dans le template de page cible, il faudra le récupérer de la manière suivante :
$wp_query->query_vars['prod']

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *