2015-07-01 5 views
1

Я делаю регистрационную форму с помощью специального кода Wordpress, я застрял, чтобы позволить пользователям войти в систему с помощью любого из адресов электронной почты или имени пользователя. Тем не менее они могут использовать только имя пользователя и проверки процесса я делаю с помощью WordPress функцииwordpress log in page либо используя либо имя пользователя, либо адрес электронной почты

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

ответ

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

'если ($ user = get_user_by_email ($ username) 'this line missing a") «Все это по сети одинаково. ... Это должно выглядеть следующим образом: 'if ($ user = get_user_by_email ($ username))' –

+0

спасибо :) Shahid Rafiq –

0

Ответ Короче говоря, вы можете настроить WordPress для входа с электронной почтой.

Три шага:

  • функция аутентификации по умолчанию Удалить
  • Добавить пользовательскую функцию проверки подлинности
  • Изменить текст "Имя пользователя" в в.ч.-login.php на "E-Mail"

Используйте remove_filter для удаления функции проверки подлинности по умолчанию и замените ее на свой собственный с помощью add_filter, а затем обновите wp-login.php соответственно.

Смежные вопросы