有时候为了安全考虑,站长会禁用注册用户通过电子邮件地址登录网站,具体怎么实现呢,这里有两个方案供您参考。

第一个,使用sanitize_user 钩子,检测到$_POST['log']为电子邮件地址是则跳转至相关说明页面,提示本站禁止电子邮件登录。

<?php 
add_filter('sanitize_user','disable_email_login',10,2);
function disable_email_login($user, $raw_user){
if(filter_var($raw_user, FILTER_VALIDATE_EMAIL)) {
wp_safe_redirect(home_url('/disable-email-login'));
}
return $user;
}

在以上代码中,$user是sanitize_user清理之后的用户名,需要返回给系统进行后续的登录操作。如果是电子邮件地址,则直接跳转到其他页面,终端登录过程。

以上代码非常简单,也是很多人用的比较多的方式,不过由于需要跳转其他页面, 对用户不太友好。这里就有了第二个方案,直接在wp-login.php页面显示提醒信息。


<?
add_filter('sanitize_user','disable_email_login',10,2);
function disable_email_login($user, $raw_user){
if(filter_var($raw_user, FILTER_VALIDATE_EMAIL)) {
global $login_by_email;
$login_by_email = true;
return $user.rand(100,999).rand(888,999); //本行的目的是返回一个不存在的电子邮件地址,以产生登录错误,
}
return $user;
}

add_filter('login_errors','lerror',10,1);
function lerror($e){
global $login_by_email;
if($login_by_email == true){
$e = ' <strong>错误</strong>:禁止使用邮箱地址登录!<br />';  //自定义错误信息。
}
return $e;
}

两种方法推荐后一种。