Як змінити роль користувача?


34

У моїх налаштуваннях є власні ролі, і я хочу мати можливість автоматично змінювати роль користувача через функцію. Скажіть, що користувач A виконує роль підписки, як я можу змінити його на редактор? Додаючи роль, ми просто:

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

Відповіді:


50

Дивіться клас WP_User , ви можете використовувати це для додавання та видалення ролей для користувача.

EDIT: Я справді повинен був надати більше інформації з цією відповіддю спочатку, тому я додаю більше інформації нижче.

Більш конкретно, роль користувача можна встановити, створивши екземпляр класу 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

1
Це ідеально підходить для користувацьких реєстраційних форм. Спочатку зареєструйте користувачів без ролей, а потім додайте їх, коли вони підтверджують електронну пошту.
Івіджан Стефан Стипіч

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()буде використовувати поточний ідентифікатор блогу за умовчанням.
fuxia

так, в моєму випадку паста була просто з багатостороннього прикладу. Я не визначив це тут і так очевидно, що це призведе до помилки.
Адам Маннс

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 (), схоже, робить саме те саме. Коли ви надаєте ідентифікатор, цей ідентифікатор оновлюється. Жоден ідентифікатор не додає нового користувача. Ще не знаю, у чому різниця між 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_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);

Удачі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.