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

通过手机号注册参考:WordPress插件:后台注册通过短信验证用户手机号