Ce dont j'ai besoin
Dans le but de tester les variations de page de produit, j'essaie de réécrire l'URL de la page de produit en quelque chose comme:
www.website.com/products/product-x/variation/1/
Ce que j'ai fait
J'ai ajouté la requête var comme suit:
/**
* Adds variation query var
*/
function gtp_add_variation_query_vars( $vars ) {
$vars[] = 'variation';
return $vars;
}
add_filter( 'query_vars', 'gtp_add_variation_query_vars');
Je me suis connecté au generate_rewrite_rules
pour ajouter une nouvelle règle de réécriture, comme suit:
/**
* Adds rewrite rule for template variation paramater
*/
function gtp_add_variation_rewrite_rules() {
global $wp_rewrite;
// Rewrite rule with (v)ariation parameter
$new_rules['products/(.+?)/variation/([0-9]*)/?$'] = 'index.php?post_type=products&products=' . $wp_rewrite->preg_index( 1 ) . '&variation=' . $wp_rewrite->preg_index( 2 );
// Add new rewrite rules to rewrite rules array
$wp_rewrite->rules = $wp_rewrite->rules + $new_rules;
return $wp_rewrite->rules;
}
add_action( 'generate_rewrite_rules', 'gtp_add_variation_rewrite_rules' );
Lorsque je vide mes règles de réécriture, la règle suivante s'affiche au bas de la sortie du tableau $wp_rewrite->rules
:
[products/(.+?)/variation/([0-9]*)/?$] => index.php?post_type=products&products=$matches[1]&variation=$matches[2]
Le problème
Mais quand je visite la page: www.website.com/products/product-x/variation/1/
je reçois un 404.
La chose étrange est que cela fonctionne sur ma copie XAMPP localhost du site actif, mais pas sur le site actif lui-même. Cela pourrait-il être un problème lié au serveur? Ou une autre règle de réécriture (mais cela ne devrait pas être un problème à mon avis, car la règle est au bas du tableau des règles de réécriture)
Informations supplémentaires:
J'ai défini ma structure de permalien (sous paramètres -> permaliens) sur la structure personnalisée "/%category%/%postname%/"
.
Mon fichier .htaccess ressemble à ceci:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Les règles de réécriture sont correctes, mais comme vous modifiez directement le $wp_rewrite
, vous ne bénéficiez pas de l'avantage de pouvoir ajouter la règle au sommet de la pile à l'aide de add_rewrite_rules
.
Vous êtes sur la bonne voie avec l'emplacement de la règle dans le tableau, mais les règles en haut sont vérifiées en premier et la première règle à faire correspondre est utilisée.
Remplacer vos deux fonctions par le code ci-dessous devrait gérer la requête_var et la règle de réécriture + le positionnement.
/**
* Adds rewrite rule for template variation paramater
*/
function gtp_add_variation_rewrite_rules() {
add_rewrite_tag( '%variation%', '([0-9]*)' );
add_rewrite_rule( 'products/(.+?)/variation/([0-9]*)/?$', 'index.php?post_type=products&products=$matches[1]&variation=$matches[2]', 'top' );
}
add_action( 'init', 'gtp_add_variation_rewrite_rules' );