问题描述

如何向用户名字段添加过滤器以阻止新用户使用不必要的字词 (如 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。