Вопрос или проблема
Пытаюсь создать пользовательское правило переписывания для страницы.
Слаг страницы: /near-me/
Создать редирект: /near-me/STATE/city/
Даже после сброса постоянных ссылок.
//* Добавить правило переписывания
add_action('init', 'sym_nearme_rewrite_rule', 10, 0);
function sym_nearme_rewrite_rule() {
add_rewrite_rule('^near-me/([^/]*)/([^/]*)/?','index.php?page_id=4331®ion=$matches[1]&city=$matches[2]','top');
}
Поскольку WordPress использует собственную систему переписывания с регулярными выражениями, его правило переписывания, когда вы включаете постоянные ссылки, это просто index.php.
Когда оно включено, оно будет сканировать ваш URL и подставлять в параметры.
Если вы сделаете это в .htaccess, иногда у вас будут конфликты в некоторых ситуациях, поэтому вам нужно тщательно протестировать.
Причина, по которой это не работает, в том, что WordPress создал общедоступный список запрашиваемых параметров.
Если вашего параметра нет в этом списке, он будет проигнорирован. Чтобы сделать ваше правило переписывания рабочим, вы можете попробовать следующее:
add_filter('query_vars', 'q361110_add_custom_queryvars' );
function q361110_add_custom_queryvars( $qvars ) {
$qvars[] = 'region';
$qvars[] = 'city';
return $qvars;
}
//* Добавить правило переписывания
add_action('init', 'sym_nearme_rewrite_rule', 10, 0);
function sym_nearme_rewrite_rule() {
add_rewrite_rule('^near-me/([^/]*)/([^/]*)/?','index.php?page_id=4331®ion=$matches[1]&city=$matches[2]','top');
}
После этого оно должно заработать.
Ответ или решение
Проблема с переадресацией правил перезаписи в WordPress
При попытке настроить собственное правило перезаписи для страницы с URL-адресом /near-me/
, в частности с созданием переадресации на /near-me/STATE/city/
, могут возникнуть некоторые сложности. Это подробно связано с функциональностью системы перезаписи URL, разработанной в WordPress. Давайте более детально рассмотрим шаги, необходимые для корректной настройки правил перезаписи, и причины, по которым ваше текущее решение не работает.
Причины проблемы
-
Стандартная обработка запросов WordPress: WordPress использует собственную систему обработки URL-адресов, основанную на регулярных выражениях. Это означает, что при включенных постоянных ссылках WordPress самостоятельно анализирует URL-адреса и преобразует их в запросы с параметрами.
-
Необходимость в параметрах: Если ваши параметры (
region
иcity
) не находятся в списке публично доступных переменных запроса WordPress, они будут игнорироваться. Поэтому для того чтобы ваше правило работало, необходимо добавить поддержку этих параметров.
Шаги по исправлению
Чтобы правильно настроить перенаправление, необходимо выполнить следующие действия:
1. Добавление пользовательских переменных запроса
Сначала вызываем фильтр query_vars
, чтобы добавить ваши пользовательские параметры (region
и city
) в список переменных запроса.
add_filter('query_vars', 'add_custom_query_vars' );
function add_custom_query_vars( $qvars ) {
$qvars[] = 'region';
$qvars[] = 'city';
return $qvars;
}
2. Добавление правила перезаписи
Затем мы добавляем ваше правило перезаписи, которое будет связывать запрошенный путь с конкретной страницей. Убедитесь, что ID страницы правильный.
add_action('init', 'create_near_me_rewrite_rule', 10, 0);
function create_near_me_rewrite_rule() {
add_rewrite_rule('^near-me/([^/]*)/([^/]*)/?','index.php?page_id=4331®ion=$matches[1]&city=$matches[2]','top');
}
3. Обновление постоянных ссылок
После добавления или изменения правил перезаписи, крайне важно обновить постоянные ссылки в админке WordPress. Для этого перейдите в меню Настройки
> Постоянные ссылки
и просто нажмите Сохранить изменения
. Это заставит WordPress пересоздать правила перезаписи, включая ваши новые изменения.
Проверка работоспособности
После выполнения вышеуказанных шагов необходимо проверить работоспособность созданного правила. Это можно сделать, перейдя по адресу /near-me/STATE/city/
и убедившись, что отображается правильная страница и параметры передаются корректно.
Заключение
Таким образом, для эффективной работы пользовательских правил перезаписи в WordPress, необходимо учитывать особенности системы управления запросами и добавлять необходимые параметры в список переменных. Правильное использование хуков и фильтров, а также регулярное обновление постоянных ссылок, помогут избежать большинства проблем, связанных с переадресацией в WordPress. Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться к сообществу разработчиков WordPress.