限制部分匹配的用户名

时间:2017-02-23 作者:Gabriel DiLaurentis

我一直在寻找我的问题的解决方案,但我一直找不到任何东西。

我找到了一个允许我限制某些用户名的插件,我甚至找到了一个函数,但没有任何东西允许我限制部分匹配的用户名,也没有任何东西阻止用户以“joeadmin”或“seanadmin”等名称注册。

是否可以采取任何措施防止用户注册任何包含“admin”和其他禁止词语的内容?

2 个回复
最合适的回答,由SO网友:Pat J 整理而成

有一个validate_username 使用的过滤器挂钩validate_user() 依次由使用register_new_user().

因此,您可以禁止包含admin 或其他禁止条款:

add_filter( \'validate_username\', \'wpse257667_check_username\', 10, 2 );
function wpse257667_check_username( $valid, $username ) {
    // This array can grow as large as needed.   
    $disallowed = array( \'admin\', \'other_disallowed_string\' );
    foreach( $disallowed as $string ) {
        // If any disallowed string is in the username,
        // mark $valid as false.
        if ( $valid && false !== strpos( $username, $string ) ) {
            $valid = false;
        }
    }
    return $valid;
}
您可以将此代码添加到主题的functions.php 文件或(最好)make it a plugin.

参考文献validate_username filter hook
  • validate_user()
  • register_new_user()
  • Writing a plugin
  • SO网友:danbrellis

    @pat-j比我快了一分钟,但我会详细说明你也可以使用reg-ex:

    add_filter( \'validate_username\', \'wpse257667_check_username\', 10, 2 );
    function wpse257667_check_username( $valid, $username ) {
        if($valid){
            $matches = null;
            $returnValue = preg_match(\'/(admin)/i\', $username, $matches);
            return empty($matches) ? true : false;
        }
    }
    

    相关推荐