Ich möchte mit E-Mail nicht Benutzername wordpress Frontend einloggen

Für die Anmeldung möchte ich dem Benutzer ermöglichen, die E-Mail anstelle des Benutzernamens zu verwenden. Das habe ich bis jetzt erreicht:

remove_filter('authenticate', 'wp_authenticate_username_password', 20); function login_with_email_address($username) { $user = get_user_by_email($username); if(!empty($user->user_login)) $username = $user->user_login; return $username; } add_action('wp_authenticate','login_with_email_address'); 

Das Ergebnis davon ist die folgende Fehlermeldung:

“Ungültiger Benutzername oder Passwort. Bitte versuchen Sie es erneut!”

Solutions Collecting From Web of "Ich möchte mit E-Mail nicht Benutzername wordpress Frontend einloggen"

Dein Code hat einige Probleme:

  • Sie verwenden die veraltete function get_user_by_email
  • Sie verwenden falschen Hook wp_authenticate

Sie können dieses Plugin https://wordpress.org/plugins/wp-email-login/

oder

Sie können diesen Code verwenden

 function wpsc_authenticate_user_by_email( $user, $username, $password ) { // Bailout if( ! is_frontend_login_form() ){ return $user; } $login_page = strtok( $_SERVER["HTTP_REFERER"], '?' ); //check for valid inputs if( $username == "" || $password == "" ) { wp_redirect( $login_page . "?login=empty" ); exit; } // get user by email if ( is_email( $username ) ) { $user = get_user_by( 'email', $username ); // validate user if ( $user && wp_check_password( $password, $user->user_pass, $user->ID ) ) { return $user; }else{ wp_redirect( $login_page . '?login=failed' ); exit; } }else{ wp_redirect( $login_page . '?login=failed' ); exit; } return $user; } add_filter( 'authenticate', 'wpsc_authenticate_user_by_email', 1, 3 ); 

Definieren Sie die Bedingungen in is_frontend_login_form() , um zu überprüfen, ob der Benutzer von Ihrem Frontend-Formular kommt oder nicht.