Редирект WordPress после сброса пароля
Я хотел бы сделать редирект на get_bloginfo('url'); после сброса пароля.
Но я никак не могу найти простой ответ или функцию для этого.
Кто-нибудь знает, возможно ли это?
Спасибо Josh
"Правильный" ответ здесь не работает, потому что действие 'password_reset' срабатывает до сброса пароля.
Я модифицировал первый ответ, до обновления, чтобы он работал.
function wpse_lost_password_redirect() {
// Проверяем, была ли отправлена форма
$confirm = ( isset($_GET['action'] ) && $_GET['action'] == resetpass );
if( $confirm ) {
wp_redirect( home_url() );
exit;
}
}
add_action('login_headerurl', 'wpse_lost_password_redirect');
Примечание: У меня не было достаточного рейтинга, чтобы оставить комментарий, поэтому я публикую это как новый ответ.
Вот простое решение. Я использую хук login_headerurl. Возможно, есть более подходящий хук для этого, но это работает. Поместите этот код в ваш файл functions.php:
function wpse_lost_password_redirect() {
// Проверяем, была ли отправлена форма
$confirm = ( isset($_GET['checkemail'] ) ? $_GET['checkemail'] : '' );
if( $confirm ) {
wp_redirect( home_url() );
exit;
}
}
add_action('login_headerurl', 'wpse_lost_password_redirect');
Что делает этот код: он срабатывает на хуке login_headerurl и проверяет GET-параметр "checkedmail", который появляется после отправки валидного имени пользователя или email. Затем я перенаправляю пользователя с помощью замечательной функции wp_redirect на home_url.
ОБНОВЛЕНИЕ после комментария
Если вы хотите перенаправить пользователя после отправки нового пароля, вам достаточно использовать хук password_reset. Вот пример:
function wpse_lost_password_redirect() {
wp_redirect( home_url() );
exit;
}
add_action('after_password_reset', 'wpse_lost_password_redirect');
Привет, Понтус, большое спасибо за ответ, это обязательно пригодится в другой раз. Но мне на самом деле нужен редирект после самого сброса нового пароля, а не после отправки email/пользователя. Вот скриншот формы, на котором мне нужно, чтобы редирект сработал... http://i.imgur.com/x2IUQ0c.jpg - Спасибо
Joshc
Ааа, понятно, это на самом деле проще, чем предыдущая функция. Смотри мой обновленный ответ.
Pontus Abrahamsson
Оу, чувак, это просто потрясающе!! Спасибо, что поделился с нами, все сработало отлично! Круто.
Joshc
Я только что использовал ваш первый ответ для чего-то другого, говорил же, что он пригодится. Еще раз спасибо.
Joshc
Обратите внимание, что действие password_reset выполняется до фактического сброса пароля. В документации сказано: Срабатывает до сброса пароля пользователя.
Ejaz
Вторая версия не работает корректно, потому что пароль на самом деле не изменится. Вы должны убрать exit, потому что это действие выполняется перед сбросом пароля.
Jon Surrell
Я не понимаю, как работает ответ "UPDATE after comment".
Документация для хука 'password_reset' гласит: "Срабатывает перед сбросом пароля пользователя".
Если сделать перенаправление и выход, то пароль не будет изменен.
Поскольку у меня была похожая задача, я разработал собственное решение проблемы. Мы по-прежнему реагируем на хук "password_reset", но вместо немедленного перенаправления добавляем хук для фильтра "login_url". И именно в этом фильтре мы добавляем перенаправление на главную страницу после входа пользователя в систему.
add_action( "password_reset", "rngs_password_reset", 10, 2 );
/**
* Реализация "password_reset" для RNGS
*
* После сброса пароля мы хотим, чтобы ссылка "Войти" перенаправляла пользователя на главную страницу.
* Когда мы видим, что это действие выполняется, мы знаем, что нужно отфильтровать "login_url", чтобы добавить перенаправление на главную страницу.
* Мы не фильтруем "login_url" в других случаях.
*
* @param WP_User $user - объект пользователя
* @param string $new_pass - новый пароль
*
*/
function rngs_password_reset( $user, $new_pass ) {
add_filter( "login_url", "rngs_login_url", 10, 2 );
}
/**
* Реализация фильтра "login_url" для RNGS
*
* Перенаправление пользователя на главную страницу после входа в систему
*
* @TODO - сделать это полем опции, которое контролирует, куда попадет вошедший пользователь
* @TODO - зависит от роли?
*
* @param string $login_url - исходный login_url, который не должен включать "redirect_to" или "reauth"
* @param string $redirect - ожидается null/пусто
*/
function rngs_login_url( $login_url, $redirect ) {
$home_redirect = home_url();
$login_url = add_query_arg('redirect_to', urlencode( $home_redirect ), $login_url);
return( $login_url );
}
Возможно, я что-то упускаю в вопросе, но есть ли что-то не так с использованием фильтра lostpassword_redirect?
add_filter( 'lostpassword_redirect', 'my_redirect_home' );
function my_redirect_home( $lostpassword_redirect ) {
return home_url();
}
Подробнее здесь: https://codex.wordpress.org/Plugin_API/Filter_Reference/lostpassword_redirect
Что вы упускаете здесь, lostpassword_redirect — это фильтр для URL, куда пользователь попадет после нажатия кнопки Забыли пароль. Затем он фактически сбросит пароль, и когда новый пароль будет установлен, автору вопроса понадобится фильтр/хук действия (вероятно, after_password_reset)
dev_masta
Redirect to - это встроенная функция WordPress, вам не нужно создавать плагин для этого, просто добавьте параметр &redirect_to= с URL, и это будет работать.
Пример:
echo '<a href="'home_url().'/wp-login.php?action=lostpassword&redirect_to='.get_bloginfo('url').'?sli=lost" rel="nofollow" title="Забыли пароль">Забыли пароль</a>';
Ответы должны быть больше, чем просто фрагмент кода. Пожалуйста, внесите правку и объясните, почему это сработает.
Gabriel