Creating custom login errors

时间:2011-04-08 作者:Thomas Clayson

我希望能够创建自定义登录错误。

例如,如果用户未登录就访问了受限区域,那么我将重定向到wp-login.php?ref=access 我想输出Restricted area, please login to continue. 或者类似的东西。

你知道怎么做吗。我发现有过滤器login_errors 但是我在出现的代码中找不到其他地方,除了登录页面本身。

最后,我真的不想为了做到这一点而改变任何核心文件。我花费了大量的时间和精力来确保wordpress的核心完全没有受到影响,以便我可以升级它。

有人有什么想法吗?

非常感谢。

汤姆

3 个回复
最合适的回答,由SO网友:Rarst 整理而成

快速查看登录屏幕代码(哎哟):

add_action(\'login_head\',\'ref_access\');

function ref_access() {

    global $error;

    if( !empty($_GET[\'ref\']) && \'access\' == $_GET[\'ref\'] )
        $error  = \'Restricted area, please login to continue.\';
}

SO网友:M12

简要更新。从WordPress版本3.6开始,使用像Rarst建议的全局变量是非常混乱的,它会破坏存储在该变量中的任何其他核心、插件或主题错误消息。

全球error Rarst所指的变量实际上是a WP_Error object 它本身负责整理WordPress调用生命周期中各种事件的错误。所以请不要破坏它的值,这使得调试非常困难。

相反,请使用wp_login_errors 过滤器(非login_errors) 和add() 存在错误。像这样:

add_filter(\'wp_login_errors\', \'my_custom_errors\');
function my_custom_error ($errors) {
    if (\'access\' === $_GET[\'ref\']) {
        $errors->add(\'access\', \'Restricted area, please login to continue.\');
    }
    return $errors;
}

SO网友:its_me

(NOTE: 这并不能完全回答您的问题。)

如果我没有错login_errors 您所说的过滤器用于在输入错误的用户名/密码时显示消息。

因此,默认情况下,当您输入错误的用户名时,会显示以下内容:

ERROR: 用户名无效。

这是一个错误的密码:

ERROR: 您为用户名XXXXX输入的密码不正确。

问题是,你可以使用login_errors 筛选以显示自定义消息:

function fake_error(){
    return \'SORRY, LOGIN DISABLED!\';
}
add_filter( \'login_errors\', \'fake_error\' );
通常,用作担保(通过隐匿?)度量,用于防止攻击者知道自己输入的用户名或密码是否错误。

结束

相关推荐

Displaying oEmbed errors?

有时,通过oEmbed嵌入项目是不可能的,例如,当YouTube视频已禁用嵌入时。The oEmbed service will return a 401 Unauthorized, 并且不会转换代码。有没有办法通知用户这一点?当前的工作流是非直观的(至少对我来说),我更喜欢在WordPress页面上,或者更好的是,在编辑器中显示一条消息,说明对象无法嵌入。