Buddypress - 当用户激活帐户时,用户角色更改为默认值

时间:2014-07-11 14:11:33

标签: wordpress buddypress

我和buddypress一起工作, 我有两个用户角色, 1,学生 2-教师 我已将默认用户角色设置为订阅者。 当用户通过点击通过邮件发送的链接注册和激活帐户时。用户角色更改为默认(订阅者)。

知道这是什么问题吗?以下是注册时用户的代码分配角色。

add_action('bp_core_signup_user', 'ad_user_signup_usermeta', 10, 5);
function ad_user_signup_usermeta($user_id, $user_login, $user_password, $user_email, $usermeta) {

        if(isset($_POST['signup_membership']) && !empty($_POST['signup_membership']))
        update_user_meta($user_id, 'membership', $_POST['signup_membership']);

        $userdata = array();
        $userdata['ID'] = $user_id;
        if(!empty($_POST['signup_usertype'])) {
            if($_POST['signup_usertype'] == 'student') {
            $userdata['role'] = 'student';  
            }
            if($_POST['signup_usertype'] == 'instructor') {
            $userdata['role'] = 'instructor';   
            }   
        }

        if ($userdata['role']){
            wp_update_user($userdata);
        }

}

1 个答案:

答案 0 :(得分:2)

激活后,BuddyPress(至少版本2.0.2)将用户角色更新为默认角色。

https://buddypress.trac.wordpress.org/browser/tags/2.0.2/bp-members/bp-members-functions.php#L1560

您可以注释掉该行,或者编写一些代码来解决它。我正在使用" WP Roles At Registration"并遇到了同样的问题。我最后在bp_core_signup_user上添加了一个过滤器以保存原始角色,但您希望在ad_user_signup_usermeta中添加类似的内容:

update_user_meta($user_id, 'temp_role', $role_name)

然后将其重置回bp_core_activated_user

的过滤器中
public function after_bp_activated_user($user_id, $key, $user) {
    $user = get_userdata($user_id);
    $role = get_user_meta($user_id, 'temp_role');
    if ($role) {
        $user->set_role($role[0]);
    }
}
add_filter('bp_core_activated_user', array($this, 'after_bp_activated_user'), 30, 3);