如何在访问页面时更改用户角色?

时间:2016-09-13 作者:EnglishTeacherEric

Stack response 解释如何更改给定用户的角色。有没有办法在页面加载时执行该操作?

我经营着一所语言学校,根据我希望学生采取的行动,未来、活跃和不活跃的学生都有独特的登录目的地。一旦他们进行了购买,我希望他们变得活跃起来,这样他们就不会,比如说,看试用课了。

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

EDIT

如果当前用户角色不在roles_to_change 数组,然后函数退出。

请注意,我没有测试错误,因此如果您发现任何错误,请在此处报告。

马利萨的回答是一个很好的方法。但是,如果您仍然想挂接页面加载,可以尝试template_redirect

您需要某种逻辑来只在特定用例上运行代码。因此,假设您已经拥有该逻辑,并且当您尝试更改用户的角色时,该用户已经登录。

像这样的东西应该有用

add_action( \'template_redirect\', \'my_change_user_role\' );
function my_change_user_role(){

  $current_user = wp_get_current_user();

  // Bail if no one is logged in
  if( 0 == $current_user->ID )
    return;

  // Fetch the WP_User object of our user.
  $cur_user = new WP_User( $current_user->ID );

  // Only Apply to users within these roles
  $roles_to_change = array(
    \'role_x\',
    \'role_y\',
    \'role_z\'
  );
  $make_change = false;  // Flag telling to make the changes or not

  // Check if we can make the change to the current user
  foreach( $roles_to_change as $change ){
    foreach ( $cur_user->roles as $user_role ){
      if( $change == $user_role ){
        $make_change = true;
        continue;
      }
    }
  }

  // Bail if role is not within those we want to make a change for
  if( ! $make_change )
    return;

  // Replace the current role with our \'new_role\' role
  $cur_user->set_role( \'new_role\' );      

}
如果您以某种形式使用它,您可以使用$_GET$_POST superglobal传递有关用户的一些信息(例如ID)。

SO网友:Malisa

我建议,与其在页面加载时尝试这样做,不如在您的购买代码中添加一个额外的函数。在这里,您已经有了可用的user\\u ID和数据。那你就用wp_update_user 采购完成时。

SO网友:Vivek Tamrakar

访问User Role Editor。它是一个用来改变用户角色的插件。

有关自定义代码,请参见wp_update_user

相关推荐