在更新/降级成员资格级别时更改第二用户角色-s2成员

时间:2017-01-10 作者:Bexx

以下是我想要实现的目标:

s2\\u member\\u level0具有第二个角色“customer”-当通过s2member提供的快捷码升级帐户时,帐户应升级到s2member\\u level1,并将其第二个角色更改为“vendor”

s2\\u member\\u level1具有第二个角色“供应商”-当通过s2member提供的快捷码降级帐户时,帐户应将自身降级为s2member\\u level0,并将其第二个角色更改回“客户”

我正在设置不同帐户的角色,同时在我的子主题中使用此功能激活这些帐户:

add_action( \'bp_core_activated_user\', \'add_secondary_role_new\', 10, 1 );

function add_secondary_role_new( $user_id ) {
  global $members_template;
  $user = get_user_by(\'id\', $user_id);
    if (user_can($members_template->member->id,\'s2member_level1\')){
      $user->add_role(\'vendor\');
    }
    else{
      $user->add_role(\'customer\');
    }
}
我想用这些功能更改用户角色,这些功能基本上更新数据库中的用户数据:

function change_role_while_upgrade_account(){
  global $members_template;
  $user = get_user_by(\'id\', $user_id);
  $user = wp_update_user(array(\'ID\'=>$user,\'role\'=>\'vendor\'));
}

function change_role_while_downgrade_account(){
  global $members_template;
  $user = get_user_by(\'id\', $user_id);
  $user = wp_update_user(array(\'ID\'=>$user,\'role\'=>\'vendor\'));
}
所以问题是:我如何将这个函数(如果它们正在工作)用于s2成员生成的短代码?有没有人能帮我找到线索?

我的升级短代码:

[s2Member-PayPal-Button modify="1" level="1" ccaps="" desc="Upgrading Account to Premium" ps="paypal" lc="" cc="EUR" dg="0" ns="1" custom="www.netz-mitteldeutschland.de" ta="0" tp="0" tt="Y" ra="2799.00" rp="1" rt="Y" rr="1" rrt="" rra="1" image="default" output="button" /]
取消订阅的短代码:

[s2Member-PayPal-Button cancel="1" image="default" output="anchor" /]
感谢您的回复

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

我找到了解决办法。这是:

//Update Roles automatically when Membership Level changes
function rb_update_user_role( $user_id) {
   $user = new WP_User( $user_id );
   $user_meta=get_userdata($user_id);
   $all_role = $user_meta->roles;

   foreach ($all_role as $role_value){
     if ($role_value === \'vendor\'){
         $user->remove_role( \'vendor\' );
     }
     if ($role_value === \'customer\'){
         $user->remove_role( \'customer\' );
     }
     if ($role_value === \'s2member_level1\'){
         $user->remove_role( \'s2member_level1\' );
         $role = \'s2member_level1\';
     }
     if ($role_value === \'subscriber\'){
         $user->remove_role( \'subscriber\' );
         $role = \'subscriber\';
     }
   }
   if ( $role === \'subscriber\' ) {
    unset($new_role);
    $new_role = array($role => 0 ,\'customer\' => 1) ;
    update_user_meta($user_id, \'wp_capabilities\', $new_role);
   } 

   if ($role === \'s2member_level1\'){
    unset($new_role);
    $new_role = array($role => 0,\'vendor\' => 1) ;
    update_user_meta($user_id, \'wp_capabilities\', $new_role);
   } 
}
add_action( \'profile_update\', \'rb_update_user_role\', 99, 1 );

相关推荐

未受保护的页面在发布到Facebook时显示为受保护(S2Member)

我最近删除了以下页面上的限制:http://www.boulderwritersworkshop.org/2012/10/21/david-jessup/我现在可以在不登录的情况下查看它。然而,如果我将此URL发布到我的Facebook墙,它会显示“加入”页面,好像Facebook认为我需要登录查看该内容。我尝试清除快速缓存并从远程计算机加载页面——所有人都可以看到。显然除了脸书。想法?