Правило перезаписи никогда не совпадает
Мне нужно добавить некоторые правила перезаписи для моего сайта. Мне нужно связать этот дружественный URL-адрес:
www.example.com/site-tool-calendar
До
www.example.com/site-tool?tool=calendar
/site-tool
уже есть постоянная ссылка внутри WordPress, и она работает
Я добавил следующее в свой 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' );
До этого, на functions.php
Я добавил параметр "инструмент" в vars запроса:
function wpd_query_vars( $query_vars ){
$query_vars[] = 'tool';
return $query_vars;
}
add_filter('query_vars', 'wpd_query_vars');
Я сбросил правила со страницы администратора Постоянная ссылка и попытался проверить URL, но хотя мое правило добавляется в список $wp_rewrite->wp_rewrite_rules()
, оно никогда не совпадает.
Это всегда соответствует общему правилу, которое выглядит следующим образом:
([^/]+)(?:/([0-9]+))?/?$
Я отладил его и проверил, что мое правило отображается в списке правил в начале, но никогда не выполняется.
Может ли кто-нибудь помочь мне перепроверить, не сделал ли я что-то не так? Я перепробовал множество альтернатив, и все они привели меня к одной и той же ситуации: правило появляется, но никогда не выполняется.
1 answers
Пожалуйста, попробуйте это.
Сначала добавьте нужное вам правило перезаписи с помощью этой функции
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');
}
Предполагая, что имя страницы - site-tools.
Теперь добавьте инструмент в качестве параметра запроса
add_filter('query_vars', 'wpd_query_vars');
function wpd_query_vars( $query_vars ){
$query_vars[] = 'tool';
return $query_vars;
}
Сохраните постоянные ссылки.
Теперь, если вы получите доступ к hxxp://ваш домен.com/сайт-инструменты-калькулятор/ Это должно работать (калькулятор может быть чем угодно другим)
Если вы хотите отладить его, вы можете сбросить var запроса "инструмент" с помощью этой функции:
add_action('template_redirect', 'test_my_queryvar', 999 );
function test_my_queryvar() {
die( var_dump( get_query_var( 'tool' ) ) );
}