Как я могу изменить URL через add_rewrite_rule()
Как из ссылки вида:
http://testsite/city/sochi/?listing_type=apartment
Я могу получить http://testsite/city/sochi/apartment
Метод предоставленный ниже не срабатывает для меня, в чем моя ошибка?
function custom_rewrite_rules() {
flush_rewrite_rules();
add_rewrite_rule('^city/(.*)/(.*)?', 'index.php?city=$matches[1]&listing_type=$matches[2]', 'top');
}
add_action('init', 'custom_rewrite_rules');
Ответы (1 шт):
У вас внутри скобок может быть и /, что ломает регулярку. Вот рабочий код:
function custom_rewrite_rules() {
add_rewrite_rule(
'^city/([^/]*)/([^/]*)/?$',
'index.php?city=$matches[1]&listing_type=$matches[2]',
'top'
);
}
add_action( 'init', 'custom_rewrite_rules' );
Вызов flush_rewrite_rules() очень ресурсоемкий, его нельзя ставить на каждую загрузку страницы. Он должен использоваться только в хуках, указанных в register_activation_hook() и register_deactivation_hook().
Для того, чтобы код начал работать, надо сбросить redirect в браузере. Для этого открыть Dev Tools (F12), а потом правой кнопкой мыши на обновление страницы и в меню выбрать Empty Cache and Hard Reload.
Проверить, что код сработал, можно в отладчике. Видим, что $this->matched_rule содержит наше правило, а результирующий запрос находится в $query. Файл apart.php - это mu-plugin для теста.

