问题描述
如何向用户名字段添加过滤器以阻止新用户使用不必要的字词 (如 administrator
) 或一般亵渎性进行注册?
理想情况下,如果我可以添加一个大量的被阻止的单词列表,该列表可以添加星号 (*) 作为通配符,例如 genitals*
。
最佳解决方案
根据安装情况,可以使用两个非常不同的钩子:
-
wpmu_validate_user_signup
用于 multi-site 和 -
registration_errors
用于 single-site 。
以下未经测试的代码显示如何使用它们。您可以根据需要调整 user_name_is_forbidden()
中的阵列。使用正则表达式进行匹配。
// multi-site
add_filter( 'wpmu_validate_user_signup', function( $result )
{
// there is already an error
if ( $result['errors']->get_error_message('user_name') )
return $result;
if ( user_name_is_forbidden( $result['user_name'] ) )
$result['errors']->add('user_name', __( 'That username is not allowed.' ) );
return $result;
});
//single-site
add_filter( 'registration_errors', function( $errors, $name )
{
if ( user_name_is_forbidden( $name ) )
$errors->add('user_name', __( 'That username is not allowed.' ) );
return $errors;
}, 10, 2);
function user_name_is_forbidden( $name )
{
// If you need the character '~', write it as '~'.
$forbidden = array(
'admin.*',
'genitals.*',
'system.*'
);
return (bool) preg_match( '~' . join( '|', $forbidden ) . '~i', $name );
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。