Правило перезаписи никогда не совпадает


Мне нужно добавить некоторые правила перезаписи для моего сайта. Мне нужно связать этот дружественный 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]+))?/?$

Я отладил его и проверил, что мое правило отображается в списке правил в начале, но никогда не выполняется.

Может ли кто-нибудь помочь мне перепроверить, не сделал ли я что-то не так? Я перепробовал множество альтернатив, и все они привели меня к одной и той же ситуации: правило появляется, но никогда не выполняется.

Author: Ethan O'Sullivan, 2016-09-19

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' ) ) );
}
 2
Author: Ahmed Fouad, 2016-09-19 22:50:26