[WordPress] ワードプレスの電子メールでのユーザーのログインが動作していません。

スポンサーリンク

Question

私はいる電子メールによって、ユーザーのログインを有効にします。 ワードプレスコデックス functions.php に次のコードを記述する方法の いくつかのいくつかのブログ で見つけた

add_action( 'wp_authenticate', 'wp_authenticate_by_email' );

function wp_authenticate_by_email( $username ) {
$user = get_user_by( 'email', $username );

   if ( empty( $user ) ) {
       return;
   }

return $user->user_login;
}

がそれは私のため動作しません。それが以前として残されているを発見しました。

答え

要するに答え、電子メールでログインするワードプレスを設定することができます

3 つの手順:

  • デフォルト認証機能を削除する
  • 追加カスタム認証ファンクション
  • 変更テキスト「メール」を wp-login.php の「ユーザー名」

1 つのノート:

  • のコア ファイルを編集しないでください

削除 WordPress デフォルト認証機能

ワードプレス ユーザーのログインで追加の検証を実行する「 認証」のフィルターを使用します

Add カスタム認証関数

 add_filter("authenticate", function($user, $email, $password){

        //Check for empty fields
        if(empty($email) || empty ($password)){        
            //create new error object and add errors to it.
            $error = new WP_Error();

            if(empty($email)){ //No email
                $error->add('empty_username', __('ERROR: Email field is empty.'));
            }
            else if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ //Invalid Email
                $error->add('invalid_username', __('ERROR: Email is invalid.'));
            }

            if(empty($password)){ //No password
                $error->add('empty_password', __('ERROR: Password field is empty.'));
            }

            return $error;
        }

        //Check if user exists in WordPress database
        $user = get_user_by('email', $email);

        //bad email
        if(!$user){
            $error = new WP_Error();
            $error->add('invalid', __('ERROR: Either the email or password you entered is invalid.'));
            return $error;
        }
        else{ //check password
            if(!wp_check_password($password, $user->user_pass, $user->ID)){ //bad password
                $error = new WP_Error();
                $error->add("invalid", __("ERROR: Either the email or password you entered is invalid."));
                return $error;
            }else{
                return $user; 
            }
        }
    }, 20, 3);

テキストの” ユーザー名“「メール」を wp-login.php の変更

テキストを変更する「メール」を「ユーザー名」のコア ファイルを編集することがなく gettext フィルターを使用することができます

add_filter('gettext', function($text){
    if(in_array($GLOBALS['pagenow'], array('wp-login.php'))){
        if('Username' == $text){
            return 'Email';
        }
    }
    return $text;
}, 20);

http://stackoverflow.com/questions/27764407/user-login-by-email-in-wordpress-is-not-working

スポンサーリンク

Leave a Reply