Почему нужно менять URL страницы выхода WooCommerce
Стандартный URL страницы выхода в WooCommerce выглядит как your-site.com/my-account/customer-logout/. По умолчанию он не всегда удобен или безопасен, особенно если вы хотите скрыть стандартные маршруты WooCommerce для повышения безопасности или улучшения пользовательского опыта. Изменение URL страницы выхода позволяет сделать адрес более понятным, брендированным или защитить от автоматических скриптов.
Диагностика текущего URL выхода в WooCommerce
Для начала убедитесь, какой URL используется для выхода. По умолчанию WooCommerce использует функцию wc_logout_url() для генерации ссылки выхода.
Проверьте в шаблоне сайта (обычно в файле header.php или пользовательском меню), что ссылка на выход создаётся через эту функцию. Например:
<a href="<?php echo wc_logout_url(); ?>">Выйти</a>Также можно проверить, какие маршруты обрабатывает WooCommerce, посмотрев на хуки и правила перезаписи в файле includes/class-wc-query.php.
Пошаговое изменение URL страницы выхода без плагинов
1. Добавление пользовательского rewrite-правила
Нужно добавить своё правило для новой ссылки выхода и обработать его соответствующим образом. Добавьте следующий код в файл functions.php вашей дочерней темы или в кастомный плагин:
function custom_logout_rewrite_rule() {
add_rewrite_rule('^exit-now/?$', 'index.php?custom_logout=1', 'top');
}
add_action('init', 'custom_logout_rewrite_rule');Это создаст новый URL your-site.com/exit-now, который будет ловить запросы и направлять их на специальный параметр запроса custom_logout=1.
2. Регистрация пользовательского параметра запроса
function custom_logout_query_vars( $vars ) {
$vars[] = 'custom_logout';
return $vars;
}
add_filter( 'query_vars', 'custom_logout_query_vars' );3. Обработка выхода при вызове нового URL
function custom_logout_template_redirect() {
if ( get_query_var('custom_logout') ) {
wp_logout();
wp_redirect( home_url() ); // можно заменить на нужный URL после выхода
exit;
}
}
add_action( 'template_redirect', 'custom_logout_template_redirect' );4. Обновление ссылок выхода в теме
Замените все вызовы wc_logout_url() на новую ссылку:
<a href="<?php echo home_url('/exit-now'); ?>">Выйти</a>Или, если хотите, создайте обёртку:
function get_custom_logout_url() {
return home_url('/exit-now');
}Проверка результата после внедрения
- Перейдите по адресу
your-site.com/exit-now— вы должны выйти из аккаунта и быть перенаправленными на домашнюю страницу. - Проверьте, что ссылки выхода на сайте ведут по новому адресу.
- Обновите постоянные ссылки (в админке WordPress > Настройки > Постоянные ссылки нажмите «Сохранить изменения») для регистрации нового rewrite-правила.
Частые ошибки и их исправление
- Ошибка 404 на новом URL: Не обновлены постоянные ссылки. Перейдите в админку WordPress, Настройки > Постоянные ссылки и нажмите «Сохранить изменения» без изменений.
- Выход не происходит: Убедитесь, что код с
wp_logout()вызывается на этапеtemplate_redirectи что нет конфликтов с другими плагинами. - Старые ссылки выхода остаются: Проверьте шаблоны и замените все вызовы
wc_logout_url()на новый URL или обёртку.
Практические советы по безопасности и производительности
- Обязательно используйте
wp_redirect()сexit;после выхода, чтобы предотвратить дальнейшее выполнение кода. - Не используйте сложные GET-параметры для выхода, чтобы избежать CSRF-атак. В нашем варианте выход по URL без параметров безопаснее.
- Если нужна дополнительная защита, можно добавить nonce или проверку реферера, но для logout это обычно избыточно.
- Для оптимизации храните URL выхода в константе или функции и не генерируйте URL динамически каждый раз без необходимости.
Сравнение способов изменения URL страницы выхода WooCommerce
| Способ | Преимущества | Недостатки | Пример |
|---|---|---|---|
| Плагин для смены URL выхода | Простота настройки, готовое решение | Дополнительная нагрузка, возможные конфликты | Плагин Custom Logout URL |
| Код на functions.php с rewrite-правилом | Минимум зависимостей, полный контроль | Нужно обновлять постоянные ссылки, требует понимания WP Rewrite API | Код из статьи |
| Изменение ссылки в шаблоне без rewrite | Очень просто | Старый URL остаётся доступен, возможны проблемы с безопасностью | Просто заменить wc_logout_url() |