У меня есть функция, которая перенаправляет пользователей на страницу входа (домой), если они пытаются получить доступ к любой другой странице без входа в систему, вот как это работает:
function restrict_access_if_logged_out(){
if (!is_user_logged_in() && !is_home()){
wp_redirect( get_option('home') );
}
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );
Действительно простой и хорошо работающий код. Но проблема в том, что мне нужно перенаправить их на URL-адрес, на который они пытались перейти после успешного входа, точно так же, как работает бэкэнд WordPress.
Есть ли способ сделать это? Заранее спасибо!
Вы можете сделать это легко. Вам просто нужно указать параметр перенаправления.
<?php echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] ); ?>
Если вы используете настраиваемую форму на первой странице, то внутри
<form>
убедитесь, что вы заполнили скрытое поле с URL-адресом для перенаправленияИ если вы используете
wp_login_form()
ля генерации формы, заполните параметр — http://codex.wordpress.org/Function_Reference/wp_login_formИзмените другие параметры в соответствии с тем, что у вас есть или нужно.
Я получил это, используя двойной слэш. Так что мое решение таково: <?php echo '//' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; ?>
Я использую пользовательскую форму, и я использую предоставленное вами решение для скрытых полей, но в моем случае меня перенаправляют на URL вроде 'localhost/wordpress/localhost/wordpress/blog/someone'. Есть еще идеи?
это мой код, который я использую, чтобы направить людей на страницу входа в wp. Затем, когда вошли в систему, они вернулись туда, где они были. Но это не домашняя страница, а страница входа в WordPress, где я настраиваю пользовательский логин.
Вы могли бы исследовать это. Вы получите текущий URL-адрес пользователя с помощью
$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]
Хук фильтра
login_redirect
filter hook здесь является более полным и эффективным решением. Таким образом, вы можете предлагать разные пути перенаправления для разных уровней пользователей или поддерживать URL перенаправления в случае ошибки при входе в систему (т.е. неверный пароль).Спасибо всем, я немного использовал то, что рекомендовали все, так что в конце мой код выглядит так:
И в моей форме входа я добавил проверку, если учетные данные пользователя в порядке, и он готов войти:
В каком файле вы добавили эти функции? Благодарю.
Вы должны вызывать exit() или die() после wp_redirect(). В противном случае возможно выполнение кода после wp_redirect(), что может привести к ошибкам и уязвимостям безопасности.
В
functions.php
Не сработал ни один из ваших ответов! Работает вот так:
Только я добавил
/wp-login.php
**ОТРЕДАКТИРОВАНО:
Также я изменил функцию:
Я проверяю протокол, а затем я удаляю ‘
esc_url
‘ и добавляю корректный протокол:$protocol://
. Также я изменил""
.Попробуйте передать
the_permalink()
в качестве$redirect
аргумента:ОТРЕДАКТИРОВАНО:
Извините, неправильно понял ваш вопрос изначально. Попробуй это:
Обратите также внимание: правильное использование
wp_redirect()
обычно требует добавленияexit;
, которое я добавил во второй пример.Извините, неправильно понял ваш вопрос изначально. Я добавил правку, которая, надеюсь, подойдет.
Это не то. Мне нужен какой-то способ перехватить исходный URL и перенаправить туда пользователя, как только он войдет в систему.
Я знаю, что это очень поздно, но я сделал пост о том, как именно это сделать, если кто-то из будущих людей найдет это и понадобится:
http://www.ryanprejean.com/force-login-with-redirect-and-exceptions/