在多站点上使用号码限制注册或禁止

时间:2011-06-15 作者:Ünsal Korkmaz

我想禁止人们或限制注册唯一的国家ID(你可以把它想象成11位数)。你知道有什么插件或代码片段吗?站点将基于多站点+BuddyPress。

Update: 我不是在寻找知识产权禁令。你可以把它想象成电话号码。。每个用户必须有一个唯一的电话号码,如果需要,我需要禁止该电话号码。

(抱歉英语不好)

5 个回复
最合适的回答,由SO网友:Ünsal Korkmaz 整理而成

首先,非常感谢您给出的每一个答案,感谢所有为此想出解决方案的人。

我最好的解决方案是不做太多改变:

正如我在评论中所说,我将使用http://www.gravityforms.com/add-ons/user-registration/ 用于注册。即使您禁用wordpress用户注册,该插件也能正常工作。所以我将禁用用户注册,这个插件的表单将是注册到此站点的唯一方式。中的关键选项是“无重复项”。我将为这个数字输入选择“无重复项”,这样插件将使用它以前的表单数据,不允许2注册这个数字。所以,若我想禁止某人,我可以用普通的wordpress禁止系统来禁止他,他不能注册两次,所以问题就解决了。

再次感谢您的帮助:)Note: 我没有做逆境或任何事情,只是分享我的解决方案,所以我希望一切都好。

SO网友:Daniel Sachs

不确定这是否是您想要的,但一种方法可能是将所有用户的注册全部隐藏起来,但用户来自您需要的国家和地区。这是一个插件,我一直在检查自己,但我必须承认,我还没有在生产网站上使用它。但它看起来很坚固:

WP-Geolocation-JS

SO网友:Tom J Nowell

在函数中按照这条线放一些东西。php或插件。它可能需要一些调整和修改,它不是一个“原样”的例子,但它应该让你走上正确的道路。

下面将向默认注册表中添加一个新的字段UI,然后检查其长度是否为11个字符,以及其他用户是否具有相同的UID。它将UID存储在用户元数据中。

如果您有自定义注册表,输入名为“user\\u uid”的文本就足够了,要获取用户的uid,请使用:$uid = get_the_author_meta( \'user_uid\', $user->ID );

示例如下:

<?php

add_action(\'register_form\',\'show_uid_field\');
add_action(\'register_post\',\'check_fields\',10,3);
add_action(\'user_register\', \'register_extra_fields\');

function show_uid_field(){
    ?>
    <p>
        <label>Unique ID<br />
        <input id="user_uid" class="input" type="text" tabindex="20" size="25" value="<?php echo $_POST[\'user_uid\']; ?>" name="first"/>
        </label>
    </p>
    <?php
}

function check_fields($login, $email, $errors) {
    global $user_uid;
    if ($_POST[\'user_uid\'] == \'\') {
        $errors->add(\'empty_user_uid\', "<strong>ERROR</strong>: Please Enter your UID");
    } else {
        $user_uid = $_POST[\'user_uid\'];
        if(strlen(trim($user_uid)) != 11){
            $errors->add(\'invalid_user_uid\', "<strong>ERROR</strong>: Invalid value, please Enter your UID");
        } else {
            $szSort = "user_nicename";
            $aUsersID = $wpdb->get_col( $wpdb->prepare( "SELECT $wpdb->users.ID FROM $wpdb->users ORDER BY %s ASC", $szSort ));
            foreach ( $aUsersID as $iUserID ) {
                $user = get_userdata( $iUserID );
                $uid = get_the_author_meta( \'user_uid\', $user->ID );
                if($uid == $user_uid){
                    $errors->add(\'notunique_user_uid\', "<strong>ERROR</strong>: This UID is already taken, please enter your UID");
                    break;
                }
            }
            // do your soap check here
        }
    }
}

function register_extra_fields($user_id, $password="", $meta=array())  {
    update_usermeta( $user_id, \'user_uid\', $_POST[\'user_uid\'] );
}

?>
我还想指出,虽然重力的形成是伟大的,但如果你试图将其延伸到一个痛苦的世界。

SO网友:MartinJJ

当用户注册到您的站点时,将数字存储为唯一密钥(类似于用户名的处理方式)。。

因此,在注册表上创建一个新的文本字段来处理这个数字,并在成功后更新usermeta。

如果出于任何原因需要禁止该帐户,那么在ban函数中,需要将该id号移动到数据库中一个单独的自定义表中。

因此,基本上,您需要对注册进行另一次检查,在您的自定义表中查找与禁用id号匹配的项,并检查现有id号(未禁用)。如果此处存在匹配项,则注册过程将失败。如果没有匹配项,则进行处理。。

但你要如何验证人们使用的是原始的政府生成的身份证号码?。。为此,您必须访问生成这些id的公式,然后需要创建一个算法来检查验证。

SO网友:anu

好的,根据我所知,您希望在注册过程中需要一个官方的国家ID(您将根据您提到的SOAP服务查询其有效性)

因此,您需要向用户配置文件中添加一个字段来存储国家ID,然后挂接注册过程以显示此新字段并要求输入。

这里有一个很好的例子可以说明如何做到这一点:http://tipsforwordpress.com/wordpress/add-custom-field-to-register-form/comment-page-1/#comment-152 (您需要添加SOAP调用和故障路径)

结束

相关推荐

Multisite wide post type?

有没有可能在不复制帖子的情况下使用多站点的帖子类型?这是一种无论你在哪个博客上都是一样的帖子类型?理论上的例子:StackExchange有许多网站(博客),但我将其称为站点范围内的新闻帖子类型sitewide_news, 在每个博客上都是一样的。如果他们碰巧在博客id 4中进行了更改或添加了一篇新文章,那么它将在3或8中显示,就像他们在那里进行了更改一样。换句话说,只有一个数据库条目存在。谢谢