web-dev-qa-db-ja.com

パスワード再設定フォームのリダイレクトの問題をカスタマイズする

自分のパスワード再設定フォームとページを作成したいのですが、このページを意味します: enter image description here 
パスワード再設定フォーム用のページテンプレート、コードを既に作成しました。

<?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(); ?>

これはそれがどのように見えるかです:
enter image description here 

フォーム送信時に、私はAjaxを使用してこれらのパスワードを検証し、問題がなければ変更するための関数を起動します。

どのように人々はこのページを見るようになるのですか? 基本的には、次のような電子メールアドレス形式を使用してパスワードのリセットを要求するがあります。
enter image description here 

電子メールを受信したら、ユーザーは次のようなリンクをクリックできます。

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

さて、関数PHPで私は$_GET変数で私​​のカスタムページにユーザをリダイレクトするためにこの関数を使いました、しかしそれはうまくいきません、どうかあなたの助けが必要です!これがコードです:

/*
 * 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

あなたがfunctions.phpに以下を追加して、あなたが何をしているのかを達成することができます。 initというアクションはあなたが探しているものに間に合うようには起動しないようです。

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