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.
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' ) ) );
}