web-dev-qa-db-fra.com

Règle de réécriture ne correspondant jamais

Je dois ajouter des règles de réécriture pour mon site. J'ai besoin de lier cette URL conviviale:

www.example.com/site-tool-calendar

à

www.example.com/site-tool?tool=calendar

/site-tool est déjà un lien permanent dans WordPress et cela fonctionne

J'ai ajouté ce qui suit sur mon functions.php

function custom_rewrite( $wp_rewrite ) {
    $feed_rules = array(
        '^site-tools-(^/.]+)/$'  =>  'site-tools/?tool=' . $wp_rewrite->preg_index(1),
    );
    $wp_rewrite->rules = $feed_rules + $wp_rewrite->rules;
}

add_filter( 'generate_rewrite_rules', 'custom_rewrite' );

Avant cela, sur le functions.php j'ai ajouté le paramètre "tool" aux vars de requête:

function wpd_query_vars( $query_vars ){
    $query_vars[] = 'tool';
    return $query_vars;
}
add_filter('query_vars', 'wpd_query_vars');

J'ai vidé les règles de la page admin Permalink et j'ai essayé de tester l'URL, mais bien que ma règle soit ajoutée à la liste $wp_rewrite->wp_rewrite_rules(), elle n'est jamais correspondant à.

Il correspond toujours à une règle générique qui ressemble à:

([^/]+)(?:/([0-9]+))?/?$

Je l'ai débogué et vérifié que ma règle apparaissait dans la liste des règles, au début, mais qu'elle n'était jamais exécutée.

Quelqu'un peut-il m'aider à vérifier si j'ai fait quelque chose de mal? J'ai essayé beaucoup d'alternatives et toutes m'ont emmené dans la même situation: la règle apparaît mais n'est jamais exécutée.

2
Guille B

S'il vous plaît essayez ceci.

Ajoutez d’abord la règle de réécriture dont vous avez besoin avec cette fonction

add_action( 'init', 'rewrite_site_tools_page' );
function rewrite_site_tools_page() {

  add_rewrite_rule(
    '^site-tools-([^/]+)$',
    'index.php?pagename=site-tools&tool=$matches[1]',
    'top');

}

En supposant que ce nom de page est site-tools.

Maintenant, ajoutez l'outil en tant que requête var

add_filter('query_vars', 'wpd_query_vars');
function wpd_query_vars( $query_vars ){
    $query_vars[] = 'tool';
    return $query_vars;
}

Enregistrer les permaliens.

Maintenant, si vous accédez à hxxp: //votredomaine.com/site-tools-calculator/ Cela devrait fonctionner (la calculatrice peut être n'importe quoi d'autre)

Si vous voulez le déboguer, vous pouvez vider la requête var "outil" avec cette fonction:

add_action('template_redirect', 'test_my_queryvar', 999 );
function test_my_queryvar() {
    die( var_dump( get_query_var( 'tool' ) ) );
}
2
Ahmed Fouad