我正在使用自定义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);
}
答案 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配置为使用电子邮件登录。
三个步骤:
使用remove_filter删除默认的身份验证功能,并使用add_filter将其替换为您自己的身份,然后相应地更新wp-login.php。