本文主要讲解 WordPress 禁止某些特定用户名注册账号、禁止用户名不能包含某些字段,或者强制用户名必须包含某些字段等,我们主要讲解非插件模式,插件也会提到,详细的方法都会在文中讲解
插件模式
使用插件比较简单,当然我是推荐安装太多插件的,安装太多插件会导致网站速度慢等问题,如果使用插件这里我们推荐使用“Restrict Usernames”或“DX Login Register” 插件,它限制用户名使用空格、禁止注册某些用户名、禁止用户名包含某些字段,或者强制用户名必须包含某些字段等。
非插件模式
在最近的一个项目中,我的客户需要WordPress用户名限制,但不想使用插件。有一些插件允许用户名限制,但它们对于这个项目来说有点过分,所以我决定通过一个代码来实现它。
1.首先我们打开主题目录下的“functions.php”文件,在文件中添加如下代码:
/**
* WordPress 禁止用户注册某些用户名
* https://www.360mb.net/24022.html
*/
function sozot_validate_username($valid, $username) {
$forbidden = array('admin', 'domain', 'download', 'downloads');//禁止注册的用户名
$pages = get_pages();
foreach ($pages as $page) {
$forbidden[] = $page->post_name;
}
if(!$valid || is_user_logged_in() && current_user_can('create_users') ) return $valid;
$username = strtolower($username);
if ($valid && strpos( $username, ' ' ) !== false) $valid=false;
if ($valid && in_array( $username, $forbidden )) $valid=false;
if ($valid && strlen($username) < 5) $valid=false;
return $valid;
}
add_filter('validate_username', 'sozot_validate_username', 10, 2);
function sozot_registration_errors($errors) {
if ( isset( $errors->errors['invalid_username'] ) )
$errors->errors['invalid_username'][0] = __( '错误:该用户名不允许注册!', 'sozot' );
return $errors;
}
add_filter('registration_errors', 'sozot_registration_errors');
代码说明:
1.上述代码第 6 行后面的数组即为不允许注册的字符,可自己修改及添加,代码中也有注释提示。
“$forbidden = array”后面的数组
2.上述代码中,“5”即是允许注册的用户名字符的最小长度,可按需要自己修改。
if ($valid && strlen($username) < 5) $valid=false;
3.完成上面的修改,在网站目录打开:“/wp-includes/formatting.php”文件,找到
function sanitize_user( $username, $strict = false ) {
把 $strict 强制指定为 false,即在 sanitize_user 这行函数的下一行添加如下代码
$strict = false;
或者直接注释掉下面这行代码:
$username = preg_replace( '|[^a-z0-9 _.\-@]|i', '', $username );
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END