J'essaie d'ajouter une règle de réécriture pour transmettre une variable à un modèle de page personnalisé.
Pour une raison étrange, il ne fait qu'exclure les nombres dans les variables. Lorsque je tape des caractères autres que des nombres, il renvoie à 404
.
Cela fonctionne: http://example.com/reco/9080
Mais ce n'est pas le cas: http://example.com/reco/abcd
(redirige vers 404
)
Ceci est mon code:
function add_rewrite_rules($wp_rewrite) {
add_rewrite_rule('reco/([^/]*)/?', 'index.php/reco/?b=$1', 'top');
}
add_action('generate_rewrite_rules', 'add_rewrite_rules');
function query_vars($public_query_vars) {
$public_query_vars[] = "b";
return $public_query_vars;
}
add_filter('query_vars', 'query_vars');
Au lieu de index.php/reco/?b=$1
, essayez ceci:
"$wp_rewrite->index?pagename=reco&b=" . $wp_rewrite->preg_index( 1 )
Vous devez également ajouter un $
à votre regex reco/([^/]*)/?
pour vous assurer que la règle correspond uniquement au chemin d'accès complet, et pas seulement au début.
Ensuite, effacez vos règles (ré-enregistrez simplement vos paramètres de permalien dans admin).
Mise à jour: Essayez d'utiliser plutôt le filtre page_rewrite_rules
et utilisez get_query_var( 'b' )
:
function wpse_139259_page_rules( $rules ) {
return array(
'reco/([^/]+)/?$' => 'index.php?pagename=reco&b=$matches[1]',
) + $rules;
}
add_filter( 'page_rewrite_rules', 'wpse_139259_page_rules' );