web-dev-qa-db-fra.com

Rewrite_rules personnalisé - passe uniquement des nombres et non des caractères alphabétiques

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.

Par exemple

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');
1
Sir Code-A-lot

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' );
1
TheDeadMedic