文章目录[隐藏]

本文主要讲解 WordPress 禁止某些特定用户名注册账号、禁止用户名不能包含某些字段,或者强制用户名必须包含某些字段等,我们主要讲解非插件模式,插件也会提到,详细的方法都会在文中讲解

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;
WordPress 禁止某些特定用户名注册或限定某些字段插图

或者直接注释掉下面这行代码:

$username = preg_replace( '|[^a-z0-9 _.\-@]|i', '', $username );

 

 

发表回复

后才能评论