不同角色的单独注册和登录

时间:2011-04-29 作者:Ash

我使用“会员”插件为我的网站设置了两个新角色——“卖家”和“买家”。

每个角色都应该有自己的注册页面和登录名。访客可以同时注册为买家和卖家,但他只能作为其中之一登录。因此,如果访问者以卖家身份登录,然后转到买家页面,他将能够以买家身份登录,当他这样做时,他将自动以卖家身份注销。

我已经搜索了几个小时的插件,可以让我选择这样做,但没有找到一个。听起来像是不同角色注册的网站中非常常见的配置。

这样的插件是否存在?如果没有,如何做到这一点?

1 个回复
最合适的回答,由SO网友:Bainternet 整理而成

为不同的角色创建两个单独的注册很容易:

//create a hidden field for role
add_action(\'register_form\',\'add_hidden_role_field\');

function add_hidden_role_field(){
    if (isset($_GET[\'role\'])){
        echo \'<input id="user_email" type="hidden" tabindex="20" size="25" value="\'.$_GET[\'role\'].\'" name="role"/>\';
    }
}

add_action(\'user_register\', \'update_role\');

//save the the role
function update_role($user_id, $password="", $meta=array()) {
   if (isset($_POST[\'role\'])){
       $userdata = array();
       $userdata[\'ID\'] = $user_id;
       $userdata[\'role\'] = $_POST[\'role\'];

       //only allow if user role is my_role to avoid a few new admins to the site
       if (($userdata[\'role\'] == "seller") or ($userdata[\'role\'] == "buyer")){
          wp_update_user($userdata);
       }
   }
}
现在,您可以将每个角色与“自己的”注册表链接:

seller: http://example.com/wp-login.php?action=register&role=seller
buyer: http://example.com/wp-login.php?action=register&role=buyer
但正如米洛所言:

“如果有人注册为买家,那么除了凭凭据登录外,他们无法以买家身份登录”

这意味着他们必须使用不同的电子邮件来注册另一个角色。

更新这是一个更新示例,说明如何为每个角色使用相同的fore,但字段不同。

因此,您只需稍微更改一下函数:

//create a hidden field for role and extra fields needed
add_action(\'register_form\',\'add_hidden_role_field\');

function add_hidden_role_field(){
    if (isset($_GET[\'role\'])){
        $user_type = $_GET[\'role\'];
        echo \'<input id="user_email" type="hidden" tabindex="20" size="25" value="\'.$_GET[\'role\'].\'" name="role"/>\';
    }
    if (isset($user_type) && $user_type == "seller"){
        //add extra seller fields here eg:
        ?>
        business name:
        <input id="user_email" type="text" tabindex="20" size="25" value="" name="business_name"/>

        business address:
        <input id="user_email" type="text" tabindex="20" size="25" value="" name="business_address"/>
        <?php
    }
    if (isset($user_type) && $user_type == "buyer"){
        //add extra buyer fields here eg:
        ?>
        buyer name:
        <input id="user_email" type="text" tabindex="20" size="25" value="" name="buyer_name"/>
        <?php
    }
}
这样,只显示特定角色所需的字段。

接下来,如果您想对这些可以使用的额外字段进行某种验证register_post 挂钩,例如:

add_action(\'register_post\',\'my_user_fields_validation\',10,3);

function my_user_fields_validation($login, $email, $errors) {
    global $firstname, $lastname;
    //get the role to check
    if (isset($_POST[\'role\'])){
        $user_type = $_POST[\'role\'];
    }
    //check the fields according to the role
    if (isset($user_type) && $user_type == "seller"){
    //check sellers fields
        if ($_POST[\'business_name\'] == \'\') {
            $errors->add(\'empty_business_name\', "<strong>ERROR</strong>: Please Enter in a Business name");
        }
        if ($_POST[\'business_address\'] == \'\') {
            $errors->add(\'empty_business_address\', "<strong>ERROR</strong>: Please Enter in Business address");
        } 
    }
    if (isset($user_type) && $user_type == "buyer"){
        //check buyers fields
        if ($_POST[\'buyer_name\'] == \'\') {
            $errors->add(\'empty_buyer_name\', "<strong>ERROR</strong>: Please Enter in a Buyer name");
        }
    }
}
然后,如果一切正常,只需根据角色保存用户元中的字段

add_action(\'user_register\', \'update_role\');

//save the role
function update_role($user_id, $password="", $meta=array()) {
   if (isset($_POST[\'role\'])){
       $userdata = array();
       $userdata[\'ID\'] = $user_id;
       $userdata[\'role\'] = $_POST[\'role\'];
        $user_type = $_POST[\'role\'];
       //only allow if user role is my_role to avoid a few new admins to the site
        if (($userdata[\'role\'] == "seller") or ($userdata[\'role\'] == "buyer")){
            wp_update_user($userdata);
        }
        if (isset($user_type) && $user_type == "seller"){
            //save sellers fields
            update_user_meta($user_id, \'business_name\', $_POST[\'business_name\']);
            update_user_meta($user_id, \'business_address\', $_POST[\'business_address\']);
        }
        if (isset($user_type) && $user_type == "buyer"){
            //save sellers fields
            update_user_meta($user_id, \'buyer_name\', $_POST[\'buyer_name\']);
        }
   }
}

结束

相关推荐

Login form in popup

我将WP3与defaul主题一起使用。我希望人们在提交评论之前注册。我想做的是建立一个链接,而不是像“留下评论”这样的评论表单。单击此链接将打开一个弹出窗口,其中包含登录/注册表单或评论表单(如果用户已登录)。这可能吗?谢谢