我可以使用的自定义登录错误和变量

时间:2013-09-24 作者:Spencer

我需要将此错误消息从包含用户名更改为用户的电子邮件地址。

我已经核对了这个问题和答案,这很有帮助,但对我来说还不够。Change login error messages

我从wp_includes/user.php 核心文件,我知道我可以使用过滤器login_errors 以覆盖此消息。我的问题是在这个过滤器中我可以访问哪些变量?如何将此切换到电子邮件?

\'<strong>ERROR</strong>: The password you entered for the username <strong>%1$s</strong> is incorrect. <a href="%2$s" title="Password Lost and Found">Lost your password</a>?\'

这是我到目前为止所拥有的,但我不知道需要使用什么变量才能使其工作。

add_filter(\'login_errors\',\'cc_login_error_message\');

function cc_login_error_message($error){
    //check if that\'s the error you are looking for
    $pos = strpos($error, \'incorrect\');
    if (is_int($pos)) {
        //its the right error so you can overwrite it
        $error = sprintf( __( \'<strong>ERROR</strong>: The password you entered for the username <strong>%1$s</strong> is incorrect. <a href="%2$s" title="Password Lost and Found">Lost your password</a>?\' ), $user_email, wp_lostpassword_url() );
    }
    return $error;
}
有什么想法吗?

特别是我脚本中的$user\\u email变量没有返回任何内容,我不确定是否有这样的变量,但我刚刚编好的那个变量。

2 个回复
最合适的回答,由SO网友:Charles Clarkson 整理而成

可能有一种更简单的方法可以做到这一点,但您可以重写wp_authenticate_username_password() 中的函数\\wp-includes\\class-wp-error.php 文件

当然,您不能直接编辑该函数,但由于该函数是一个过滤器函数,因此您可以删除过滤器、复制它、将复制的函数添加回并测试它。在测试它仍然产生相同的错误后,您可以更改复制代码中的错误。

下面的代码删除了旧的WordPress函数,并创建了一个具有唯一名称的新函数。

remove_filter( \'authenticate\', \'wp_authenticate_username_password\' );
add_filter( \'authenticate\', \'wpse_115539_authenticate_username_password\', 20, 3 );
/**
 * Remove Wordpress filer and write our own with changed error text.
 */
function wpse_115539_authenticate_username_password( $user, $username, $password ) {
    if ( is_a($user, \'WP_User\') )
        return $user;

    if ( empty( $username ) || empty( $password ) ) {
        if ( is_wp_error( $user ) )
            return $user;

        $error = new WP_Error();

        if ( empty( $username ) )
            $error->add( \'empty_username\', __(\'<strong>ERROR</strong>: The username field is empty.\' ) );

        if ( empty( $password ) )
            $error->add( \'empty_password\', __( \'<strong>ERROR</strong>: The password field is empty.\' ) );

        return $error;
    }

    $user = get_user_by( \'login\', $username );

    if ( !$user )
        return new WP_Error( \'invalid_username\', sprintf( __( \'<strong>ERROR</strong>: Invalid username. <a href="%s" title="Password Lost and Found">Lost your password</a>?\' ), wp_lostpassword_url() ) );

    $user = apply_filters( \'wp_authenticate_user\', $user, $password );
    if ( is_wp_error( $user ) )
        return $user;

    if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) )
        return new WP_Error( \'incorrect_password\', sprintf( __( \'<strong>ERROR</strong>: The password you entered for the username <strong>%1$s</strong> is incorrect. <a href="%2$s" title="Password Lost and Found">Lost your password</a>?\' ),
        $username, wp_lostpassword_url() ) );

    return $user;
}
下一步是测试代码,以确保它产生与之前相同的错误。测试完成后,请尝试根据需要更改错误消息。如果出现错误,请重新开始或注释掉前两行,WordPress函数将使用旧的错误消息。

// remove_filter( \'authenticate\', \'wp_authenticate_username_password\', 20, 3 );
// add_filter( \'authenticate\', \'wpse_115539_authenticate_username_password\', 20, 3 );

SO网友:wesamly

您可以使用请求变量了解用于登录的用户名,然后检查用户是否存在以获取其电子邮件(不建议这样做,因为有人可能试图获取用户的电子邮件地址):

function my_show_login_error($parm){
    $vars = print_r($_REQUEST,true);
    $my_message = \'<strong>ERROR:</strong> Wrong username/password!\';
    return $vars;

}
add_filter(\'login_errors\',\'my_show_login_error\' );
它显示:

Array ( 
    [log] => myuser 
    [pwd] => mypass 
    [otp] => 
    [wp-submit] => Log In 
    [redirect_to] => http://example.com/wp-admin/ 
    [testcookie] => 1 
) 

结束

相关推荐

如何重命名运行在IIS6上的WordPress wp-login.php?

我的Windows 2003 VPS最近挂起,因为机器人程序连续几个小时不停地敲打我的WordPress登录php(根据IIS6日志确定)。这导致MySQL耗尽了所有分配的1G RAM。重置VM后,我迅速重命名了wp登录名。php来防止我的服务器再次崩溃。按照重命名新安装的web应用程序的管理员用户名和管理员登录文件夹/路径的标准做法,在6月份第一次安装WP之后,我尝试重命名WP admin文件夹,但失败了。我向wp admin添加了Windows身份验证,希望这将有助于提高安全性,但事实证明,这并不能阻