Редирект 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 - Спасибо

Ааа, понятно, это на самом деле проще, чем предыдущая функция. Смотри мой обновленный ответ.

Оу, чувак, это просто потрясающе!! Спасибо, что поделился с нами, все сработало отлично! Круто.

Я только что использовал ваш первый ответ для чего-то другого, говорил же, что он пригодится. Еще раз спасибо.

Обратите внимание, что действие password_reset
выполняется до фактического сброса пароля. В документации сказано: Срабатывает до сброса пароля пользователя.

Вторая версия не работает корректно, потому что пароль на самом деле не изменится. Вы должны убрать exit
, потому что это действие выполняется перед сбросом пароля.

Я не понимаю, как работает ответ "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
)

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>';

Ответы должны быть больше, чем просто фрагмент кода. Пожалуйста, внесите правку и объясните, почему это сработает.
