Php wordpress使用用户名或电子邮件登录页面

Php wordpress使用用户名或电子邮件登录页面,php,wordpress,email,authentication,login,Php,Wordpress,Email,Authentication,Login,我正在使用自定义wordpress代码制作一个登录表单,我坚持让用户能够通过电子邮件或用户名登录。 不过,他们只能使用用户名和验证过程,我正在与wordpress功能的帮助 $user_verify = wp_signon( $login_data, false ); 请让我知道如何使用电子邮件的任何用户名让用户登录。 多谢各位 我使用此代码仅使用用户名登录。如何更改电子邮件和用户名以登录 $username = $wpdb->escape($_REQUEST['username']

我正在使用自定义wordpress代码制作一个登录表单,我坚持让用户能够通过电子邮件或用户名登录。 不过,他们只能使用用户名和验证过程,我正在与wordpress功能的帮助

$user_verify = wp_signon( $login_data, false ); 
请让我知道如何使用电子邮件的任何用户名让用户登录。 多谢各位

我使用此代码仅使用用户名登录。如何更改电子邮件和用户名以登录

 $username = $wpdb->escape($_REQUEST['username']);
 $password = $wpdb->escape($_REQUEST['password']);

  if ($username && $password) {
  $login_data = array();
  $login_data['user_login'] = $username;
  $login_data['user_password'] = $password;


    $user_verify = wp_signon( $login_data, false ); 
    $user_check = $user_verify->user_id;
    if(!empty($user_verify->id))
    {
    do_action('wp_login', $user_verify->user_login, $user_verify);
    wp_set_current_user( $user_verify->ID );
    wp_set_auth_cookie( $user_verify->ID );
    $r2 = get_current_user_id();
    $registerd = get_user_meta($r2, 'package', true);
        global $current_user;
        $user_id=$current_user->data->ID;
        $paid_tag_list=get_user_meta($user_id,'tags','');
        $used_tag_list=get_user_meta($user_id,'tags','');

        $company_name=get_user_meta($user_id,'company_name','');


        $used_tag=explode(',',$used_tag_list[0]);

        $used_tags=explode(',',$used_tag_list[0]);

        if($paid_tag_list[0])
        $paid_tag=explode(',',$paid_tag_list[0]);
        else
        $paid_tag=array();;
                                                                                  $paid_list=array_unique(array_filter(array_merge($paid_tag,$used_tags))); 

        foreach ($paid_list as $c){


                            $paid_l[]=str_replace(' ','',$c);

                            }



         $directs=$wide->Getdirect();

        foreach($directs as $key=>$value)
        {
                if($value==$info_post['desired_direction'][0]) 

                    {
                    $direct[]=$value ;
                    }

                else
                     {


                    $direct[]=$value;

                    }

        } 
        $states=array('USA'=>array(
    'ALABAMA',
   'Aguascalientes',

   'Morelos',

  'Tlaxcala',

   )
    );

        $array = array("status" => "success", "message" => "user     login","cars"=>$paid_l,"company"=>$company_name,"states"=>$states,"direction"=>$direct);
        echo json_encode($array);
    } else {
        $array = array("status" => "fail", "message" => "Enter Correct     Log-in info");
        echo json_encode($array);
    }       
   }else {
   $array = array("status" => "fail", "message" => "something missing");
  echo json_encode($array);
  }

简而言之,您可以配置WordPress以使用电子邮件登录

三个步骤:

  • 删除默认身份验证功能
  • 添加自定义身份验证功能
  • 将wp-login.php中的文本“Username”更改为“E-Mail”
使用remove_filter删除默认身份验证函数,并使用add_filter将其替换为您自己的身份验证函数,然后相应地更新wp-login.php

将此代码放入function.php

用户名和电子邮件(都是登录名)

用户名(只有通过登录的用户名)

如果($user=get\u user\u by\u email($username)
这一行缺少一个“)”那么整个网络都是一样的。。。它应该如下所示……
if($user=get\u user\u by\u email($username))
remove_filter( 'authenticate', 'wp_authenticate_username_password', 20, 3 );
     add_filter( 'authenticate', 'tcb_authenticate_username_password', 20, 3 );


       function tcb_authenticate_username_password( $user, $username, $password ) {
          if ( ! empty( $username ) && is_email( $username ) ) :
            if ( $user = get_user_by_email( $username ) )
              $username = $user->user_login;
          endif;

          return wp_authenticate_username_password( null, $username, $password );
        }
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',10,1);