перенаправление wordpress после сброса пароля
Я хотел бы иметь возможность перенаправлять на get_bloginfo('url');
после сброса пароля.
Но я ни за что на свете не могу найти никакого простого ответа или функции для этого.
Кто-нибудь знает, возможно ли это?
Спасибо Джош
5 answers
Вот простое решение. Я подключаюсь к login_headerurl
. Может быть, для этого есть лучший крючок, но он работает, поместите это в свой functions.php :
function wpse_lost_password_redirect() {
// Check if have submitted
$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", который вы получаете после того, как отправили действительное имя пользователя или адрес электронной почты. Затем я перенаправляю с помощью функции awsome 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');
"Правильный" ответ здесь не работает, потому что действие "password_reset" срабатывает перед сбросом пароля.
Я изменил первый ответ перед обновлением, чтобы он работал.
function wpse_lost_password_redirect() {
// Check if have submitted
$confirm = ( isset($_GET['action'] ) && $_GET['action'] == resetpass );
if( $confirm ) {
wp_redirect( home_url() );
exit;
}
}
add_action('login_headerurl', 'wpse_lost_password_redirect');
Редактировать: Не хватило репутации, чтобы прокомментировать, поэтому я публикую это как новый ответ.
Я не вижу, как работает ответ "ОБНОВИТЬ после комментария".
В документации для крючка "password_reset" говорится, что "Срабатывает до сброса пароля пользователя".
Если вы перенаправите, а затем выйдете, пароль не будет изменен.
Поскольку у меня была аналогичная потребность, я разработал свое решение этой проблемы. Мы по-прежнему отвечаем на крючок "password_reset", но вместо немедленного перенаправления мы добавляем крючок для фильтра "login_url". И именно в этот фильтр мы добавляем перенаправление на домашнюю страницу после входа пользователя в систему.
add_action( "password_reset", "rngs_password_reset", 10, 2 );
/**
* Implement "password_reset" for RNGS
*
* After a password reset has been performed we want the Log in link to redirect the user to the home url.
* When we see this action being run we know that we should be filtering "login_url" to add the redirect the home page.
* We don't filter "login_url" any other time.
*
* @param WP_User $user - the user object
* @param string $new_pass - the new password
*
*/
function rngs_password_reset( $user, $new_pass ) {
add_filter( "login_url", "rngs_login_url", 10, 2 );
}
/**
* Implement "login_url" filter for RNGS
*
* Redirect the user to the home page after logging in
*
* @TODO - make this an option field that controls where the logged in user goes
* @TODO - dependent upon role?
*
* @param string $login_url - the original login_url which is not expected to include "redirect_to" or "reauth"
* @param string $redirect - expected to be null/blank
*/
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
Перенаправление на - это функция wordpress, для которой вам не нужно создавать плагин, просто добавьте &redirect_to= URL-адрес, и он будет работать. Пример:
echo '<a href="'home_url().'/wp-login.php?action=lostpassword&redirect_to='.get_bloginfo('url').'?sli=lost" rel="nofollow" title="Forgot Password">'Forgot Password'</a>';