web-dev-qa-db-fra.com

Personnaliser le problème de redirection du formulaire de mot de passe

Je voudrais créer mon propre formulaire et page de réinitialisation de mot de passe, je veux dire cette page:  enter image description here 
J'ai déjà créé un modèle de page pour le formulaire de réinitialisation du mot de passe, le code:

<?php
/*
 * Template Name: Page - Reset Password
 */
if( !is_user_logged_in() ) {
    wp_redirect( site_url( 'login' ) );
}
get_header();
?>

<div id="content" class="content-area" role="main">
    <div class="forms-wrapper">
        <div class="form-reset-password-wrapper">
            <h1>Reset your password</h1>
            <form id="form-reset-password" name="resetpassform" class="form-reset-password" action="<?php echo site_url( '/wp-login.php?action=resetpass', 'https' ); ?>" method="post" autocomplete="off">
                <input type="hidden" id="user_login" value="<?php echo $_GET['login']; ?>" autocomplete="off">
                <p class="form-row">
                    <label for="user_pass">New password
                    <input type="password" name="user_pass" id="user_pass">
                </p>
                <p class="form-row">
                    <label for="user_pass_confirm">Confirm new password
                    <input type="password" name="user_pass_confirm" id="user_pass_confirm">
                </p>
                <p class="reset-password-submit">
                    <input type="submit" id="reset-password-btn" class="reset-password-btn" value="Submit"/>
                </p>
                <div class="form-reset-password-errors"></div>
            </form>
        </div>
    </div>
</div>

<?php get_footer(); ?>

Voici à quoi ça ressemble:
 enter image description here 

Sur le formulaire de soumission, je déclenche une fonction utilisant Ajax pour valider ces mots de passe et les modifier si tout va bien, tout va bien.

Comment les gens peuvent-ils voir cette page? il y a fondamentalement le demande une réinitialisation de mot de passe en utilisant le formulaire d'adresse électronique} qui ressemble à ceci:
 enter image description here 

Une fois l'e-mail reçu, l'utilisateur peut cliquer sur un lien qui ressemble à ceci:

https://example.com/wp-login.php?action=rp&key=tkFUnvcJmhu30nRxqjpt&login=example%gmail.com

Maintenant, dans les fonctions PHP, j'ai utilisé cette fonction pour rediriger les utilisateurs vers ma page personnalisée avec les variables $_GET mais cela ne fonctionne pas, j'ai besoin de votre aide s'il vous plaît! voici le code:

/*
 * Redirect to custom reset password page
 */
function override_reset_password_form_redirect() {
    $action = isset( $_GET['action'] ) ? $_GET['action'] : '';
    $key = isset( $_GET['key'] ) ? $_GET['key'] : '';
    $login = isset( $_GET['login'] ) ? $_GET['login'] : '';

    if ( 'wp-login.php' === $GLOBALS['pagenow'] && ( 'rp' == $action  || 'resetpass' == $action ) ) {
        wp_redirect( site_url( '/reset-password/' ) . '?key=' . $key . '&login=' . $login );
        exit;
    }
}
add_action( 'init', 'override_reset_password_form_redirect' );
1
odedta

Vous pouvez ajouter ce qui suit à votre functions.php pour obtenir ce que vous recherchez. L'action init ne semble pas se déclencher à temps pour ce que vous recherchez.

if($_GET['action']==='rp' && strpos($_SERVER['REQUEST_URI'],'wp-login.php')) {
    $key = isset( $_GET['key'] ) ? $_GET['key'] : '';
    $login = isset( $_GET['login'] ) ? $_GET['login'] : '';
    wp_redirect( site_url( '/reset-password/' ) . '?key=' . $key . '&login=' . $login );
    exit;
}
2
Liam Stewart