How to change a user's role?

时间:2010-12-01 作者:Joann

我的设置中有自定义角色,我希望能够通过函数自动更改用户的角色。假设用户A有订阅者角色,如何将其更改为编辑器?添加角色时,我们只需:

add_role( $role_name , $role_display_name , array( \'read\' =>  true,
                                                   \'edit_posts\' => false,
                                                   \'delete_posts\' => false, ));
换个角色怎么样?是否有类似于:

change_role($old_role, $new_role);
UPDATE:我想这个可以:

$wp_user_object = new WP_User($current_user->ID);
$wp_user_object->set_role(\'editor\');

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

请参见WP_User class, 您可以使用它为用户添加和删除角色。

EDIT: <最初我真的应该为这个答案提供更多信息,所以我在下面添加了更多信息

更具体地说,可以通过创建WP\\u用户类的实例并调用add_role()remove_role() 方法。

示例将订阅服务器角色更改为编辑器

// NOTE: Of course change 3 to the appropriate user ID
$u = new WP_User( 3 );

// Remove role
$u->remove_role( \'subscriber\' );

// Add role
$u->add_role( \'editor\' );
希望这比我最初的回答更有帮助,因为我的回答不一定那么有帮助。

SO网友:Philipp

请注意,有一种更简单的方法可以更改用户角色,当您不知道用户的当前角色时,这种方法尤其有用:->set_role()

示例:

// Fetch the WP_User object of our user.
$u = new WP_User( 3 );

// Replace the current role with \'editor\' role
$u->set_role( \'editor\' );

SO网友:Adam Munns

要根据t31os的答案进行推断,如果希望根据条件以编程方式执行此操作,可以在函数文件中添加类似的内容

$blogusers = get_users($blogID.\'&role=student\');

foreach ($blogusers as $user) {

    $thisYear = date(\'Y-7\');
    $gradYear = date(get_the_author_meta( \'graduation_year\', $user->ID ).\'-7\');

    if($gradYear < $thisYear) {
        $u = new WP_User( $user->ID );
        // Remove role
        $u->remove_role( \'student\' );

        // Add role
        $u->add_role( \'adult\' );
    }
}

SO网友:Brad Dalton

您可以通过编辑用户配置文件来更改任何用户的角色。如果此选项已内置到WordPress中,则无需再添加任何代码。

enter image description here

您可以使用代码将具有订阅服务器角色的所有当前用户更改为编辑器:

$current_user = wp_get_current_user();

// Remove role
$current_user->remove_role( \'subscriber\' );

// Add role
$current_user->add_role( \'editor\' );

SO网友:Wasim Khan
<?php
$wuser_ID = get_current_user_id();
if ($wuser_ID)
    {
      // NOTE: Of course change 3 to the appropriate user ID
      $u = new WP_User( $wuser_ID );

      // Remove role
      $u->remove_role( \'subscriber\' );

      // Add role
      $u->add_role( \'contributor\' );
    }
?>
SO网友:Coen Jacobs

有一个WordPress函数

我认为最好使用WordPress函数,如果它们可用的话。

您可以使用wp_insert_user() 函数,其中需要提供的参数之一是$userdata[\'role\']。在此参数中,可以指定要将用户更改为的角色。

SO网友:Nour Edin Al-Habal

你可以用wp_update_user. 您的代码应该如下所示:

<?php
    $user_id = 3;
    $new_role = \'editor\';

    $result = wp_update_user(array(\'ID\'=>$user_id, \'role\'=>$new_role));

    if ( is_wp_error( $result ) ) {
        // There was an error, probably that user doesn\'t exist.
    } else {
        // Success!
    }
?>

SO网友:Mohammed Alhanafi

我知道这是一篇很老的帖子,但我发现用户的角色存储在wp_usermeta 带键的表格wp_capabilities 在里面meta_key

如果您想更改用户角色,可以通过这个简单的函数来完成。

function change_role($id, $new_role){
    GLOBAL $table_prefix;
    if(is_array($new_role)){
        $new_role_array = $new_role;
    }else{
        $new_role_array = array( $new_role => true );
    }
    return update_user_meta($id, $table_prefix.\'capabilities\', $new_role_array);
}
有两种方法可以使用此功能。

如果要将角色更改为单个角色。

change_role(2, \'editor\'); // editor is the new role
或者,如果要向用户添加多个角色,请在第二个参数中使用角色作为数组。

$roles_array = array(\'editor\' => true, \'administrator\' => true); // roles array
change_role(2, $roles_array);
祝你好运。

结束

相关推荐