web-dev-qa-db-fra.com

Réécrire l'URL laid pour nettoyer l'URL

J'essaye de partir de:

http://www.example.com/product?level1=value1&level2=value2&level3=value3&level4=value4

À:

http://www.example.com/product/value1/value2/value3/value4

Parfois, toutes les valeurs ne sont pas définies. Il doit donc fonctionner avec seulement 2 valeurs:

http://www.example.com/product/value1/value2

La page http://www.example.com/product/ utilise son propre fichier de modèle.

Voici à quoi ressemble mon code:

function my_rewrite_rules( $wp_rewrite ) {
    $wp_rewrite->rules =
    array_merge( array(
        '^product/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$' =>
        'index.php?level1=$matches[1]&level2=$matches[2]&level3=$matches[3]&level4=$matches[4]'
    ), $wp_rewrite->rules);
}

add_filter( 'generate_rewrite_rules', 'my_rewrite_rules' );

function my_rewrite_queryvars( $qvars ) {
    $qvars[] = 'level1';
    $qvars[] = 'level2';
    $qvars[] = 'level3';
    $qvars[] = 'level4';
    return $qvars;
}

add_filter( 'query_vars', 'my_rewrite_queryvars' );

Cela fonctionne lorsque je cherche à obtenir le query_vars, mais cela me donne également une page 404, et non le bon modèle.

Qu'est-ce que je fais mal?

1
Patrick

Ok, j'ai trouvé une solution.

Tout d'abord, je dois choisir l'identifiant. Essayé avec p = id, mais la page est toujours renvoyée sans les paramètres. Tout ce que j'avais à faire, c'était d'ajouter page_id = id à la place.

J'aurais aussi besoin d'ajouter une réécriture pour chaque nouveau niveau.

1
Patrick