Редирект WordPress после сброса пароля

24 янв. 2013 г., 16:46:48
Просмотры: 31.5K
Голосов: 11

Я хотел бы сделать редирект на get_bloginfo('url'); после сброса пароля.

Но я никак не могу найти простой ответ или функцию для этого.

Кто-нибудь знает, возможно ли это?

Спасибо Josh

0
Все ответы на вопрос 5
2
12

"Правильный" ответ здесь не работает, потому что действие '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');

Примечание: У меня не было достаточного рейтинга, чтобы оставить комментарий, поэтому я публикую это как новый ответ.

4 нояб. 2014 г. 17:50:55
Комментарии

Это следует опубликовать как ответ. Хорошая работа.

Christine Cooper Christine Cooper
4 нояб. 2014 г. 17:52:44

Отличное решение - работает и на MS тоже.

Q Studio Q Studio
28 апр. 2018 г. 12:51:55
7
10

Вот простое решение. Я использую хук 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');
25 янв. 2013 г. 22:50:09
Комментарии

Привет, Понтус, большое спасибо за ответ, это обязательно пригодится в другой раз. Но мне на самом деле нужен редирект после самого сброса нового пароля, а не после отправки email/пользователя. Вот скриншот формы, на котором мне нужно, чтобы редирект сработал... http://i.imgur.com/x2IUQ0c.jpg - Спасибо

Joshc Joshc
26 янв. 2013 г. 17:39:50

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

Pontus Abrahamsson Pontus Abrahamsson
26 янв. 2013 г. 20:51:11

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

Joshc Joshc
27 янв. 2013 г. 14:32:33

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

Joshc Joshc
14 февр. 2013 г. 20:28:05

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

Ejaz Ejaz
11 нояб. 2015 г. 21:50:34

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

Jon Surrell Jon Surrell
11 июл. 2016 г. 09:50:39

после_сброса_пароля

Clayton Jones Clayton Jones
3 апр. 2019 г. 12:00:45
Показать остальные 2 комментариев
0

Я не понимаю, как работает ответ "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 );
} 
7 авг. 2014 г. 09:59:19
1

Возможно, я что-то упускаю в вопросе, но есть ли что-то не так с использованием фильтра 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

7 февр. 2017 г. 00:35:48
Комментарии

Что вы упускаете здесь, lostpassword_redirect — это фильтр для URL, куда пользователь попадет после нажатия кнопки Забыли пароль. Затем он фактически сбросит пароль, и когда новый пароль будет установлен, автору вопроса понадобится фильтр/хук действия (вероятно, after_password_reset)

dev_masta dev_masta
29 нояб. 2019 г. 20:54:48
1
-1

Redirect to - это встроенная функция WordPress, вам не нужно создавать плагин для этого, просто добавьте параметр &redirect_to= с URL, и это будет работать.

Пример:

echo '<a href="'home_url().'/wp-login.php?action=lostpassword&amp;redirect_to='.get_bloginfo('url').'?sli=lost" rel="nofollow" title="Забыли пароль">Забыли пароль</a>';
15 авг. 2015 г. 18:06:21
Комментарии

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

Gabriel Gabriel
15 авг. 2015 г. 18:27:06