如何更改用户角色?


34

我在设置中具有自定义角色,并且希望能够通过功能自动更改用户的角色。假设用户A拥有SUBSCRIBER角色,如何将其更改为EDITOR?添加角色时,我们只是:

add_role( $role_name , $role_display_name , array( 'read' =>  true,
                                                   'edit_posts' => false,
                                                   'delete_posts' => false, ));

换个角色怎么样?是否有类似的东西:

change_role($old_role, $new_role);

更新: 我认为这可以做到:

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

Answers:


50

请参阅WP_User类,您可以使用它来添加和删除用户角色。

编辑: 最初我真的应该提供更多有关此答案的信息,所以我在下面添加了更多信息。

更具体地说,可以通过创建WP_user类的实例并调用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' );

希望这比我最初的回应更有帮助,但未必同样有用。


remove_role()add_rule()数据保存到数据库?
b_dubb

18

请注意,有一种更简单的方法来更改用户角色,这在您不知道用户的当前角色时特别有用: ->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' );

请记住,set_role将删除用户的先前角色并分配新角色。
shasi kanth's

1
这非常适合自定义注册表格。首先注册没有角色的用户,然后在他们确认电子邮件后添加角色。
Ivijan StefanStipić17年

3

如果要根据条件以编程方式执行此操作,可以推断出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' );
    }
}

我认为您的用法$blogID是错误的。get_users()仍然会默认使用当前博客ID。
福厦

是的,在我的案例中,粘贴仅来自一个多站点示例。我也没有在这里定义它,因此很明显它将引发错误。
亚当·芒斯

2

您可以通过编辑用户个人资料来更改任何用户的角色。当此选项已内置到WordPress中时,无需添加任何其他代码。

在此处输入图片说明

要么

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

$current_user = wp_get_current_user();

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

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

1

有一个WordPress功能!

我认为最好在可用时使用WordPress功能。

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


wp无法识别该功能。我收到“未定义函数”错误。

从外观上看,wp_insert_user()似乎完全一样。提供ID时,该ID会更新。没有ID正在添加新用户。真的不知道wp_update_user()和wp_insert_user()之间有什么区别。
科恩·雅各布斯

1

如果将代码用作独立脚本,则必须包含/wp-includes/registration.php。关于Uwe


1

您可以使用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!
    }
?>

0
<?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' );
    }
?>

0

我知道这是一个非常古老的帖子,但是我发现用户的角色存储在wp_usermeta表中,其中的键wp_capabilitiesmeta_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);

祝好运。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.