Как изменить роль пользователя?

1 дек. 2010 г., 11:42:55
Просмотры: 131K
Голосов: 54

У меня настроены пользовательские роли, и я хочу иметь возможность автоматически изменять роль пользователя через функцию. Допустим, у пользователя 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');
0
Все ответы на вопрос 9
4
73

Смотрите класс WP_User, его можно использовать для добавления и удаления ролей пользователя.

Конкретно, роль пользователя можно изменить, создав экземпляр класса WP_User и вызвав методы add_role, remove_role или set_role в зависимости от ваших требований.

Пример

Удаление роли подписчика и добавление роли редактора.

// Убедитесь, что заменили `3` на соответствующий ID пользователя
$u = new WP_User( 3 );

// Удаление роли
$u->remove_role( 'subscriber' );

// Добавление роли
$u->add_role( 'editor' );

Методы добавления и удаления, вероятно, лучше всего подходят для случаев, когда пользователям назначаются несколько ролей.

Если ваша цель — просто изменить роль, это проще сделать с помощью метода set_role, как показано ниже.

// Убедитесь, что заменили `10` на соответствующий ID пользователя
$u = new WP_User( 10 );

// Изменение роли
$u->set_role( 'author' );

Надеюсь, это поможет.

1 дек. 2010 г. 13:09:35
Комментарии

Методы remove_role() и add_rule() сохраняют данные в базу данных?

b_dubb b_dubb
29 окт. 2019 г. 23:42:16

Да @b_dubb, оба метода сохраняют в базу через метод update_user_meta() здесь. Смотри add_role() здесь и remove_role() здесь

Gonçalo Figueiredo Gonçalo Figueiredo
7 янв. 2020 г. 14:58:11

Довольно удобно. Спасибо.

b_dubb b_dubb
7 янв. 2020 г. 23:07:07

set_role() удалит все текущие роли и добавит указанную роль одной командой

G-J G-J
19 апр. 2020 г. 01:11:10
2
33

Обратите внимание, что существует более простой способ изменить роль пользователя, который особенно полезен, когда вы не знаете текущую роль пользователя: ->set_role()

Пример:

// Получаем объект WP_User для нашего пользователя.
$u = new WP_User( 3 );

// Заменяем текущую роль на роль 'editor'
$u->set_role( 'editor' );
14 июн. 2015 г. 17:38:42
Комментарии

Помните, что set_role удалит предыдущие роли пользователя и назначит новую роль.

shasi kanth shasi kanth
3 мая 2016 г. 15:52:07

Это идеально подходит для пользовательских форм регистрации. Сначала зарегистрируйте пользователей без ролей, а затем добавьте роль после подтверждения email.

Ivijan Stefan Stipić Ivijan Stefan Stipić
15 сент. 2017 г. 20:34:20
2

Чтобы расширить ответ t31os, вы можете добавить что-то подобное в файл functions.php, если хотите выполнить это программно на основе условия:

$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 );
        // Удаляем роль
        $u->remove_role( 'student' );

        // Добавляем новую роль
        $u->add_role( 'adult' );
    }
}
29 окт. 2012 г. 20:42:32
Комментарии

Я думаю, вы неправильно используете $blogID. get_users() по умолчанию и так использует ID текущего блога.

fuxia fuxia
29 окт. 2012 г. 21:27:25

Да, в моем случае вставка была просто из примера для мультисайта. Я здесь это не определял, поэтому очевидно, что будет ошибка.

Adam Munns Adam Munns
26 нояб. 2012 г. 19:46:06
0
<?php
$wuser_ID = get_current_user_id();
if ($wuser_ID)
    {
      // ПРИМЕЧАНИЕ: Конечно, замените 3 на соответствующий ID пользователя
      $u = new WP_User( $wuser_ID );

      // Удалить роль
      $u->remove_role( 'subscriber' );

      // Добавить роль
      $u->add_role( 'contributor' );
    }
?>
7 авг. 2017 г. 05:13:50
0

Вы можете изменить роль любого пользователя, редактируя его профиль. Нет необходимости добавлять дополнительный код, так как эта функция уже встроена в WordPress.

Изменение роли пользователя в WordPress

Или

Вы можете использовать код, чтобы изменить роль всех текущих пользователей с ролью подписчика на редактора:

$current_user = wp_get_current_user();

// Удалить роль
$current_user->remove_role( 'subscriber' );

// Добавить роль
$current_user->add_role( 'editor' );
16 апр. 2015 г. 10:03:04
2

В WordPress для этого есть функция!

Я считаю, что лучше использовать функции WordPress, когда они доступны.

Вы можете использовать функцию wp_insert_user(), где одним из аргументов, который вам нужно указать, является $userdata['role']. В этом аргументе вы можете указать роль, в которую хотите преобразовать пользователя.

1 дек. 2010 г. 13:16:58
Комментарии

WordPress не распознает эту функцию. Я получаю ошибку "undefined function".

Joann Joann
1 дек. 2010 г. 13:42:12

Судя по всему, wp_insert_user() делает то же самое. Если указать ID, пользователь с этим ID будет обновлен. Без ID - добавляется новый пользователь. Пока не совсем понимаю, в чем разница между wp_update_user() и wp_insert_user().

Coen Jacobs Coen Jacobs
1 дек. 2010 г. 13:46:33
0

Если вы используете этот код как самостоятельный скрипт, вам необходимо подключить файл /wp-includes/registration.php.

С уважением,
Uwe

22 дек. 2010 г. 16:50:19
0

Вы можете использовать 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 ) ) {
        // Произошла ошибка, возможно, пользователь не существует.
    } else {
        // Успех!
    }
?>
9 нояб. 2016 г. 13:17:52
0

Я знаю, что это очень старый пост, но я обнаружил, что роли пользователей хранятся в таблице 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 - это новая роль

Или если вы хотите добавить несколько ролей пользователю, используйте массив ролей во втором параметре.

$roles_array = array('editor' => true, 'administrator' => true); // массив ролей
change_role(2, $roles_array);

Удачи.

28 мар. 2019 г. 00:24:41