Überprüfen Sie den korrekten Benutzernamen im benutzerdefinierten Anmeldeformular

Ich habe das Lernprogramm von Jeff Star verwendet, um ein eigenes benutzerdefiniertes Login-Formular zu erstellen http://digwp.com/2010/12/login-register-password-code/ . Es funktioniert gut, aber ich habe ein Problem. Wenn auf dem Formular zum Zurücksetzen des Passworts jemand seinen Benutzernamen falsch eingibt (damit er nicht überprüft wird), wird er mit der Fehlermeldung zum Standard-wp-login.php? Action = lostpassword gekickt.

Gibt es eine Möglichkeit, auf meine eigene Fehlerseite umzuleiten?

Vielen Dank!

Solutions Collecting From Web of "Überprüfen Sie den korrekten Benutzernamen im benutzerdefinierten Anmeldeformular"

Der Code, den er in diesem Tutorial gepostet hat (sehr nette BTW), posten das Formular an das eingebaute “reset password” -Modul, das bei einem Fehler zur login.php umleitet, aber Sie können das ändern und Ihr eigenes basierend auf dem Original erstellen und hinzufügen es auf der Vorlagenseite ändern:

 

zu:

 

Hier ist eine aktualisierte Version des Codes von @bainnetnet mit den korrigierten Syntaxerrorsn, dem Vorschlag von @Val und dem Schlüsselgenerator von wp-login.php 3.4.2:

 global $wpdb; $username = trim($_POST['user_login']); $user_exists = false; // First check by username if ( username_exists( $username ) ){ $user_exists = true; $user = get_user_by('login', $username); } // Then, by e-mail address elseif( email_exists($username) ){ $user_exists = true; $user = get_user_by_email($username); }else{ $error[] = '

'.__('Username or Email was not found, try again!').'

'; } if ($user_exists){ $user_login = $user->user_login; $user_email = $user->user_email; $key = $wpdb->get_var($wpdb->prepare("SELECT user_activation_key FROM $wpdb->users WHERE user_login = %s", $user_login)); if ( empty($key) ) { // Generate something random for a key... $key = wp_generate_password(20, false); do_action('retrieve_password_key', $user_login, $key); // Now insert the new md5 key into the db $wpdb->update($wpdb->users, array('user_activation_key' => $key), array('user_login' => $user_login)); } //create email message $message = __('Someone has asked to reset the password for the following site and username.') . "\r\n\r\n"; $message .= get_option('siteurl') . "\r\n\r\n"; $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n"; $message .= __('To reset your password visit the following address, otherwise just ignore this email and nothing will happen.') . "\r\n\r\n"; $message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . "&redirect_to=".urlencode(get_option('siteurl'))."\r\n"; //send email meassage if (FALSE == wp_mail($user_email, sprintf(__('[%s] Password Reset'), get_option('blogname')), $message)) $error[] = '

' . __('The e-mail could not be sent.') . "
\n" . __('Possible reason: your host may have disabled the mail() function...') . '

'; } if (count($error) > 0 ){ foreach($error as $e){ echo $e . "
"; } }else{ echo '

'.__('A message will be sent to your email address.').'

'; }

Ich hatte immer noch Probleme mit der Reset-Taste nicht richtig funktioniert, der Link in der E-Mail würde mich auf die Standard-Passwort zurücksetzen Seite mit dem URL-Parameter verweist auf ein Problem mit dem Schlüssel, so dass ich näher auf die wp-login.php-Datei folgte und das $ wp_hasher-Objekt eingeschlossen, behebt dies das Problem und das Zurücksetzen des Passworts in der E-Mail funktioniert jetzt

 if (($_SERVER['REQUEST_METHOD'] === (string) 'POST') && (isset($_POST['reset_pass']))) { // Acccess global properties global $wpdb, $wp_hasher; // Variables $error_pass_reset = array(); $username = (string) trim($_POST['user_login']); $user_exists = (bool) false; // ---- USERNAME OR EMAIL EXISTS ---- // if (username_exists($username)) { $user_exists = (bool) true; $user = (object) get_user_by('login', $username); } // end if else if (email_exists($username)) { $user_exists = (bool) true; $user = (object) get_user_by('email', $username); } // end else if else { $error_pass_reset[] = '

Username or Email was not found, please try again.

'; } // end else // ---- USER EXISTS ---- // if ($user_exists === (bool) true) { // Variables $user_login = (string) $user -> user_login; $user_email = (string) $user -> user_email; // Generate password reset key if (empty($key)) { $key = (string) wp_generate_password(20, false); do_action('retrieve_password_key', $user_login, $key); // Create the $wp_hasher object if (empty($wp_hasher)) { require_once(ABSPATH . WPINC . '/class-phpass.php'); $wp_hasher = new PasswordHash(8, true); } // Reset key with hasher applied (MD5 has string output) $hashed = (string) time() . ':' . $wp_hasher -> HashPassword($key); // Insert the new key into the database $wpdb -> update( $wpdb -> users, array( 'user_activation_key' => $hashed ), array( 'user_login' => $user_login ) ); } // end if // Email message $message = (string) 'Someone requested that the password be reset for the following account:' . "\r\n\r\n" . get_option('siteurl') . "\r\n\r\n" . 'Username: ' . $user_login . "\r\n\r\n" . 'If this was a mistake, just ignore this email and nothing will happen.' . "\r\n\r\n" . 'To reset your password, visit the following address:' . "\r\n\r\n" . get_option('siteurl') . '/wp-login.php?action=rp&key=' . $key . '&login=' . $user_login . "\r\n"; // Send email if ((bool) false === wp_mail($user_email, get_option('blogname') . ' Password Reset', $message)) { $error_pass_reset[] = '

The e-mail could not be sent at this time.

' . "\n"; } // end if } // end if // Send the rest password email do_action('login_form', 'resetpass'); } // end if (($_SERVER['REQUEST_METHOD'] === (string) 'POST') && (isset($_POST['reset_pass'])))