Настройка проблемы перенаправления формы сброса пароля


Я хотел бы создать свою собственную форму и страницу для сброса пароля, я имею в виду эту страницу: 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' );
Author: odedta, 2018-11-13

1 answers

Вы можете добавить следующее к своему 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
Author: Liam Stewart, 2018-11-15 20:17:11