web-dev-qa-db-fra.com

redirection wordpress après réinitialisation du mot de passe

Je voudrais pouvoir rediriger vers get_bloginfo('url'); après la réinitialisation du mot de passe.

Mais je ne peux pas pour la vie trouver une réponse simple ou une fonction pour le faire.

Est-ce que quelqu'un sait si c'est possible?

Merci Josh

7
Joshc

Voici une solution simple. Je m'accroche à login_headerurl. Peut-être y a-t-il un meilleur crochet pour cela mais cela fonctionne, mettez ceci dans votre 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');

Ce qu'il fait, il s'exécute sur login_headerurl et recherche le paramètre GET "Checkmail" obtenu après l'envoi d'un nom d'utilisateur ou d'un courrier électronique valide. Ensuite, je redirige en utilisant la fonction géniale wp_redirect vers le home_url .

UPDATE après le commentaire

Si vous souhaitez rediriger l'utilisateur après avoir soumis un nouveau mot de passe, il vous suffit d'utiliser le hook password_reset voici un exemple:

function wpse_lost_password_redirect() {
    wp_redirect( home_url() ); 
    exit;
}
add_action('after_password_reset', 'wpse_lost_password_redirect');
7
Pontus Abrahamsson

La réponse "correcte" ne fonctionne pas ici car l'action 'password_reset' se déclenche avant le mot de passe est réinitialisé.

J'ai modifié la première réponse, avant la mise à jour, pour qu'elle fonctionne.

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

Edit: N'ayant pas assez de représentants pour commenter, je publie cela comme une nouvelle réponse.

9
r00tAcc3ss

Je ne vois pas comment la réponse "UPDATE after comment" fonctionnait.

La documentation relative au hook 'password_reset' indique "Se déclenche avant que le mot de passe de l'utilisateur ne soit réinitialisé.".
Si vous redirigez, quittez le mot de passe ne sera pas changé.

Comme j'avais un besoin similaire, j'ai développé ma solution au problème. Nous répondons toujours au hook "password_reset" mais au lieu d'effectuer immédiatement la redirection, nous ajoutons un hook pour le filtre "login_url". Et c'est dans ce filtre que nous ajoutons les redirections à la page d'accueil après la connexion de l'utilisateur.

 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 );
} 
2
bobbingwide

Peut-être qu'il me manque quelque chose dans la question, mais y a-t-il un problème avec l'utilisation du filtre lostpassword_redirect?

add_filter( 'lostpassword_redirect', 'my_redirect_home' );

function my_redirect_home( $lostpassword_redirect ) {
    return home_url();
}

Plus ici: https://codex.wordpress.org/Plugin_API/Filter_Reference/lostpassword_redirect

0
rsigg