我和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);
}
}
答案 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);