Вопрос или проблема
Я создал свои собственные маршруты, используя метод add_rewrite_rule
. Я хотел бы узнать, возможно ли с помощью данного метода заставить все созданные мной маршруты перенаправляться на URL, заканчивающийся косой чертой. Например, если я сделаю
add_rewrite_rule('^my-route/', 'index.php?_my_route=1', 'top')
или
add_rewrite_rule('^my-route', 'index.php?_my_route=1', 'top')
и сделаю запрос к http://site.dev/my-route
, то он не перенаправляет на http://site.dev/my-route/
. Если это возможно, буду признателен за подсказку :).
Просто измените ваше правило на следующее
add_rewrite_rule('^my-route?$', 'index.php?_my_route=1', 'top')
Думаю, это поможет вам
Добавьте это в functions.php
add_action( 'init',function(){
global $wp;
$current_url = home_url(add_query_arg(array(),$wp->request));
$last_char = substr($current_url, -1);
if($last_char == "https://wordpress.stackexchange.com/" && filter_var($current_url, FILTER_VALIDATE_URL)){
wp_redirect( trailingslashit( $current_url ) );
}
});
Ответ или решение
Конечно! Чтобы ваши пользовательские маршруты, созданные с помощью метода add_rewrite_rule
, перенаправлялись на URL с завершающим слэшем, вы можете использовать следующий подход. Это будет включать в себя создание правила перенаправления и добавление соответствующей функции в файл functions.php
вашей темы.
Шаг 1: Настройка правила перезаписи
Во-первых, вам нужно убедиться, что у вас есть правильное правило перезаписи. Используйте следующее правило, которое проверяет наличие завершающего слэша:
add_action('init', function() {
add_rewrite_rule('^my-route/?$', 'index.php?_my_route=1', 'top');
});
Шаг 2: Перенаправление с отсутствующим слэшем
Теперь добавим функцию, которая будет проверять, есть ли завершающий слэш в вашем URL, и если его нет, перенаправлять пользователя к правильному адресу с завершающим слэшем:
add_action('template_redirect', function() {
global $wp;
$current_url = home_url(add_query_arg(array(), $wp->request)); // Получаем текущий URL
$last_char = substr($current_url, -1); // Извлекаем последний символ
// Проверяем, что URL не заканчивается на слэш и не является адресом с завершающим слэшем
if ($last_char !== '/' && strpos($current_url, 'my-route') !== false) {
wp_redirect(trailingslashit($current_url), 301); // Перенаправляем с добавлением завершающего слэша
exit; // Прерываем выполнение скрипта после перенаправления
}
});
Полное решение
Вставьте следующий код в файл functions.php
вашей темы:
function custom_rewrite_rule() {
add_rewrite_rule('^my-route/?$', 'index.php?_my_route=1', 'top');
}
add_action('init', 'custom_rewrite_rule');
add_action('template_redirect', function() {
global $wp;
$current_url = home_url(add_query_arg(array(), $wp->request));
$last_char = substr($current_url, -1);
// Перенаправляем, если нет завершающего слэша
if ($last_char !== '/' && strpos($current_url, 'my-route') !== false) {
wp_redirect(trailingslashit($current_url), 301);
exit;
}
});
Заключение
Этот код обеспечивает корректное перенаправление на маршруты с завершающим слэшем, что может помочь избежать проблем с SEO и обеспечить консистентность URL вашего сайта. Не забудьте обновить правила перезаписи, перейдя в "Настройки" -> "Постоянные ссылки" в административной панели WordPress, даже если вы не вносили никаких изменений.