wordpress使用手机号码登录
手机号码存储于 wp_usermeta 表,meta_key 值是 phone,想要使用手机号登录,可通过hook钩子 sanitize_user 用户名过滤机制,通过提交的手机号获取用户名进行登录操作。
/*
* 使用手机号登录网站
* 修改WordPress用户名过滤机制,通过手机号获取用户名
*
* 只登录页面有效
* 读取 wp_usermeta 表中 phone 字段
*/
if( in_array($GLOBALS['pagenow'], array('wp-login.php')) &&
strpos($_SERVER['REQUEST_URI'], '?action=register') === FALSE &&
strpos($_SERVER['REQUEST_URI'], '?action=lostpassword') === FALSE &&
strpos($_SERVER['REQUEST_URI'], '?action=logout') === FALSE &&
strpos($_SERVER['REQUEST_URI'], '?action=rp') === FALSE ) {
add_filter('sanitize_user', 'yang_allow_phone_login', 10, 3);
}
//add_filter('sanitize_user', 'yang_allow_phone_login', 10, 3);
function yang_allow_phone_login($username, $raw_username, $strict) {
if( !empty($raw_username) && preg_match("/^(((13[0-9]{1})|(15[0-9]{1})|(17[0-9]{1})|(18[0-9]{1}))+\d{8})$/", $raw_username) ){
global $wpdb;
$user_id = $wpdb->get_var($wpdb->prepare("SELECT user_id FROM $wpdb->usermeta jw WHERE jw.meta_key='%s' AND jw.meta_value='%s'", 'phone', $raw_username));
if (empty($user_id)){
wp_die(__('ERROR: There is no user registered with that phone number.'), '用户名不正确');
}else{
if( function_exists('get_user_by') ){
include_once(ABSPATH.'wp-includes/pluggable.php');
}
$user = get_user_by('id', $user_id);
return $user->user_login;
}
}else{
return $username;
}
}