[亲测]WordPress中文用户名注册的有效解决方法

在百度知道有一道友提问:

《WordPress中文汉字用户名不能注册怎么办?》
http://zhidao.baidu.com/question/496821217188051324.html

wordpress的注册入口为 /wp-login.php,然后经过 register_new_user(), wp_create_user(), wp_insert_user()等一系列函数,其中对用户名重复进行了验证与过滤,包括sanitize_user(),validate_username().
wordpress注册过程中,对用户名默认进行了严格过滤,即sanitize_user( $username, true );

wordpress自2.0.1版起,就针对sanitize_user提供了hooks给开发者,所以一切皆有可能。

我作出如下回答:

add_filter( 'sanitize_user', 'rebuild_sanitize_user', 999, 3);
function rebuild_sanitize_user( $username, $raw_username, $strict ){ 
    return $raw_username;
}

将上段代码放在当前theme的functions.php文件中,再至后台中文注册试一试,效果立显。
PS: 该段代码只是简易测试,应参考sanitize_user进行必要的安全过滤。

在WordPress Development Stack Exchange上,Rarst的回答很精彩。

add_filter('sanitize_user', 'non_strict_login', 10, 3);
// link: http://wordpress.stackexchange.com/questions/7328/allowing-non-latin-characters-in-registration
function non_strict_login( $username, $raw_username, $strict ) {

    if( !$strict )
        return $username;

    return sanitize_user(stripslashes($raw_username), false);
}

不过Rarst没测试,而且同样提出了这种循环是否合理的疑虑。所以仅作为参考。

One thought on “[亲测]WordPress中文用户名注册的有效解决方法”

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注