Вопрос или проблема
У меня есть форма входа на каждой странице моего WordPress, и я пытаюсь перенаправить пользователя на ту же страницу после входа.
Например: Если я выполняю вход по URL http://localhost/wordpress/category/sub-category/sold
, перенаправьте на тот же URL.
У меня есть это в моем functions.php
, но использование моего $url
не работает.
Как сделать перенаправление?
function login_go_home(){
//$url ="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
wp_redirect(home_url());
exit();
}
Мне нужно сделать следующий шаг:
Для перенаправления при выходе я добавил следующий код в functions.php
function out_home(){
wp_redirect(home_url());
exit();
}
add_action("wp_logout","out_home");
В моем header.php, чтобы изменить значение моего URL после входа:
$URL_POSTLOGIN = add_query_arg(array(),$wp->request);
function login_go_home($URL_POSTLOGIN){
wp_redirect($URL_POSTLOGIN);
exit();
}
add_action("wp_login","login_go_home");
Может быть, это не лучшее решение, но в моем случае другие коды не сработали.
Ответ или решение
Чтобы выполнить редирект пользователя на ту же страницу после входа в систему WordPress, вам нужно будет немного изменить ваш код в functions.php
. Давайте рассмотрим, как это сделать, шаг за шагом.
Редирект после входа в систему
-
Использование хука
wp_login
: Вы можете использовать хукwp_login
для выполнения редиректа после успешной аутентификации пользователя. -
Получение текущего URL: Вам нужно получить текущий URL, чтобы перенаправить пользователя именно туда.
Вот правильный код для выполнения этой задачи:
function redirect_after_login($redirect_to, $request, $user) {
// Если есть ошибка входа, просто вернем редирект WordPress по умолчанию
if (isset($user->errors) && !empty($user->errors)) {
return $redirect_to;
}
// Получаем URL, откуда пришел пользователь
$current_url = (isset($_SERVER['HTTP_REFERER'])) ? $_SERVER['HTTP_REFERER'] : home_url();
// Перенаправляем на текущий URL
return $current_url;
}
add_filter('login_redirect', 'redirect_after_login', 10, 3);
Редирект после выхода из системы
Ваш код для редиректа после выхода из системы выглядит вполне корректно. Код, который вы предоставили, можно оставить без изменений:
function out_home() {
wp_redirect(home_url());
exit();
}
add_action("wp_logout", "out_home");
Пояснение к коду
- Функция
redirect_after_login
: Эта функция срабатывает после входа пользователя. Она получает три параметра: URL для редиректа, URL запроса и объект пользователя.- Если есть ошибки аутентификации, функция вернёт стандартный редирект.
- В противном случае она будет использовать
HTTP_REFERER
для перенаправления на страницу, с которой пришёл пользователь.
- Хук
add_filter
: Мы используем фильтрlogin_redirect
, чтобы изменить поведение редиректа после входа.
Общая рекомендация
Если вы хотите, чтобы пользователи после входа всегда возвращались на ту же страницу, где они находились, убедитесь, что на всех страницах установлен механизм (например, скрытый input), который передаёт текущий URL в логику входа. Это поможет устранить возможные проблемы, если HTTP_REFERER
по какой-либо причине не сработает.
Заключение
Эти изменения позволят вам легко перенаправлять пользователей на текущую страницу после входа и на главную страницу после выхода из системы. Если у вас появятся дополнительные вопросы или потребуется дальнейшая помощь, не стесняйтесь спрашивать!