Настройка проблемы перенаправления формы сброса пароля
Я хотел бы создать свою собственную форму и страницу для сброса пароля, я имею в виду эту страницу:
Я уже создал шаблон страницы для формы сброса пароля, код:
<?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' );
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;
}