Ich möchte mein eigenes Formular und meine eigene Seite zum Zurücksetzen des Passworts erstellen. Ich meine diese Seite:
Ich habe bereits eine Seitenvorlage für das Formular zum Zurücksetzen des Passworts erstellt, den 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(); ?>
Beim Absenden eines Formulars starte ich eine Funktion mit Ajax, um diese Passwörter zu validieren und zu ändern, wenn alles gut läuft.
Wie kommen die Leute auf diese Seite? im Grunde gibt es das ein Passwort über das E-Mail-Adressformular zurücksetzen lassen, das so aussieht:
Nachdem die E-Mail empfangen wurde, kann der Benutzer auf einen Link klicken, der ungefähr so aussieht:
https://example.com/wp-login.php?action=rp&key=tkFUnvcJmhu30nRxqjpt&login=example%gmail.com
In den Funktionen PHP habe ich diese Funktion verwendet, um Benutzer mit den Variablen $_GET
zu meiner benutzerdefinierten Seite umzuleiten, aber es funktioniert nicht. Ich benötige Ihre Hilfe, bitte! Hier ist der 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' );
Sie können Ihrem functions.php
Folgendes hinzufügen, um das zu erreichen, wonach Sie suchen. Die Aktion init
scheint nicht rechtzeitig für das, wonach Sie suchen, ausgelöst zu werden.
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;
}