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

时间:2015-07-01 12:46:49

标签: php wordpress email authentication login

我正在使用自定义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);
  }

2 个答案:

答案 0 :(得分:1)

  

把这段代码写成function.php

用户名和电子邮件(均为登录)

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);

答案 1 :(得分:0)

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

三个步骤:

  • 删除默认身份验证功能
  • 添加自定义身份验证功能
  • 将wp-login.php中的文本“用户名”更改为“电子邮件”

使用remove_filter删除默认的身份验证功能,并使用add_filter将其替换为您自己的身份,然后相应地更新wp-login.php。