WordPress 主题制作技巧之三 [ 支持中文用户名登录 ]
如果你也正在用wordpress作为博客或者企业网站,那么一定对这个用户页面并不陌生:
Wordpress的强大地球上的人都清楚,但是从另一方面说,它有时候也会让我们感到繁杂。比如用户设置吧,从上面的图中就可以看到关于名称的设置就有“用户名”、“名”、“姓”、“昵称”、“公开显示名称”,除了“名”和“姓”可以不设置,另外三个都要设置。
想用中文名作为“用户名”的用户可能会遇到这样的问题:当以中文字符注册时,系统提示错误:
如今连域名都支持中文字符了,wordpress这么流行的东西居然还不支持中文用户名,实在有点说不过去,毕竟现实中确实存在这方面的需求。好在我们可以通过修改系统函数让其支持中文用户名。控制注册字符的函数是在wp_includes/formatting.php中定义的sanitize_user,代码如下
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( '/&.+?;/', '', $username ); // 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, $raw_username, $strict ); }
这个函数之所以能够控制中文字符的注册,是因为系统中用户名的注册和修改函数(wp-includes/user.php中的validate_username和wp_insert_user)在执行时引用了sanitize_user函数,并且将sanitize_user函数的第二个参数的值置为“true”,这样sanitize_user函数中的
$username = preg_replace( '|[^a-z0-9 _.\-@]|i', '', $username );
也因此屏蔽了uername字符串中字母和数字以外的字符。所以要想让username支持中文,有两种方法:
1)在sanitize_user函数注释掉 if 语句;
2)在用户名注册和修改函数调用sanitize_user时将第二个参数值置为“false”。
这样就OK了,不过如果没有中文用户名注册需求的话,还是建议不要修改wordpress的系统函数。