自分のパスワード再設定フォームとページを作成したいのですが、このページを意味します:
パスワード再設定フォーム用のページテンプレート、コードを既に作成しました。
<?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(); ?>
フォーム送信時に、私はAjaxを使用してこれらのパスワードを検証し、問題がなければ変更するための関数を起動します。
どのように人々はこのページを見るようになるのですか? 基本的には、次のような電子メールアドレス形式を使用してパスワードのリセットを要求するがあります。
電子メールを受信したら、ユーザーは次のようなリンクをクリックできます。
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' );
あなたが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;
}