A-A+
WordPress 注册支持中文
WordPress的用户名一共有三种,我们打开users表就可以看到这三种分别是user_login、user_nicename、 display_name,第一个user_login指的是登录名,第三个display_name指的是显示在前台文章、评论里面的名字。
display_name是可以显示中文字符的,也是允许用户自行修改的,但是代表用户唯一身份的user_login确实并不支持中文用户名,注册后也不允许自行修改。
虽然很多情况下user_login不支持中文用户名也无伤大雅,可以有display_name在前台应付,不过有时候我们还是希望user_login也支持中文用户名。
分析WP的代码发 现,问题出在sanitize_user这个函数上。WP使用这个函数对用户名进行过滤,这个函数的第二个可选参数$strict默认是关闭 (flase)的,即不进行相关字符屏蔽。WP在用户名的注册和修改过程中在validate_username和wp_insert_user两个函数 中调用了sanitize_user,并且以ture为第二个参数的值,这样就屏蔽了数字和字母以外的字符(only alphanumeric characters)。
sanitize_user在wp_includes/formatting.php中定义,其函数体如下:
function sanitize_user( $username, $strict = false ) { $raw_username = $username; $username = wp_strip_all_tags( $username ); $username = remove_accents( $username ); // Kill octets $username = preg_replace( '|%([a-fA-F0-9][a-fA-F0 -9])|', '', $username ); $username = preg_replace( '/&.+?;/', '', $usernam e ); // Kill entities // If strict, reduce to ASCII for max portability. if ( $strict ) $username = preg_replace( '|[^a-z0-9 _.\-@]|i', '', $username ); // Consolidate contiguous whitespace $username = preg_replace( '|\s+|', ' ', $username ); return apply_filters( 'sanitize_user', $username, $r aw_username, $strict ); }
这样,我们简单地在第746行前面加上//注释掉这个语句,就可以支持中文用户名了。当然,根据版本不同,你的不一定也是第746行。
//$username = preg_replace( '|[^a-z0-9 _.\-@]|i', '', $username );
对了,,我是不是也得回敬你一个爱称呢~~~~你觉得“夏夏”怎么样呢~~
提到英语就头疼~~~福音呢
先收藏了,以后有机会用。
好像用處不大!~~
对我来说用处不大,因为尚未开启用户注册,感觉wp的用户管理太简陋了。
对于小博客来说,wp的用户注册几乎用不到.
用的比较少,不知道博主可不可以把留言板下面的英文代码去掉。
留言板下面的英文是什么?
在这里寻求答案,总有一些问题是会遇到的。
每天过来看一看,支持一下夏日博客
中文名意义不大吧,反正有昵称
其实我是比较喜欢英文注册的.
博主这个犀利
我有个个人的博客,可以放上。谢谢博主了。
直接添加一个钩子返回就行了。
add_filters(‘sanitize_user’,function($r,$u,$f){return $u;});
此项功能太强大了,感谢博主的分享,还是支持中文的好。期待更多新的功能出现···
技术宅男啊,佩服佩服!
期待这个功能很久了,博主写的不错