我在设置中具有自定义角色,并且希望能够通过功能自动更改用户的角色。假设用户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');


#1 楼

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

编辑:最初我真的应该为此答案提供更多的信息,所以我在下面添加了更多的信息。 br />
更具体地说,可以通过创建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
19-10-29在21:42

是@b_dubb,这两种方法都通过此处的update_user_meta()方法保存到db。在此处查看add_role()和在此处查看remove_role()

–贡萨洛·菲格雷多(GonçaloFigueiredo)
20年1月7日,12:58



那很方便。谢谢。

– b_dubb
20年1月7日在21:07

set_role()将删除所有角色,并在一个命令中添加指定的角色

– G-J
20-04-18在22:11

#2 楼

请注意,有一种更简单的方法来更改用户角色,这在您不知道用户的当前角色时特别有用:->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
16年5月3日,12:52

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

–艾维安·斯特凡·斯蒂皮奇(Ivijan StefanStipić)
17/09/15在17:34



#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。

– fuxia♦
2012年10月29日19:27

是的,在我的案例中,粘贴仅来自一个多站点示例。我也没有在这里定义它,因此显然会引发错误。

–亚当·蒙斯(Adam Munns)
2012年11月26日17:46

#4 楼

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





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

$current_user = wp_get_current_user();

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

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


#5 楼

有一个WordPress函数!

我认为最好是在可用的时候使用WordPress函数。

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

评论


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

–琼
2010年12月1日,11:42

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

–科恩·雅各布斯(Coen Jacobs)
2010-12-1 11:46



#6 楼

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

#7 楼

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


#8 楼

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


#9 楼

我知道它的帖子很旧,但是我发现用户角色存储在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);


祝你好运。