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

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

UPDATE: Я думаю, что это будет делать:

$wp_user_object = new WP_User($current_user->ID);
$wp_user_object->set_role('editor');
30 голосов | спросил Joann 1 WedEurope/Moscow2010-12-01T12:42:55+03:00Europe/Moscow12bEurope/MoscowWed, 01 Dec 2010 12:42:55 +0300 2010, 12:42:55

8 ответов


43

См. класс 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' );

Надеюсь, это более полезно, чем мой первоначальный ответ, что не обязательно было так полезно.

ответил t31os 1 WedEurope/Moscow2010-12-01T14:09:35+03:00Europe/Moscow12bEurope/MoscowWed, 01 Dec 2010 14:09:35 +0300 2010, 14:09:35
11

Просто помните, что есть более простой способ изменить роль пользователя, что особенно полезно, когда вы не знаете текущую роль пользователя: ->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' );
ответил Philipp 14 J0000006Europe/Moscow 2015, 17:38:42
2

Чтобы экстраполировать ответ 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' );
    }
}
ответил Adam Munns 29 +04002012-10-29T22:42:32+04:00312012bEurope/MoscowMon, 29 Oct 2012 22:42:32 +0400 2012, 22:42:32
2

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

введите описание изображения здесь>> </p>

<p> или </p>

<p> Вы можете использовать код для изменения всех текущих пользователей с ролью подписчика в редакторе: </p>

<pre><code>$ current_user = wp_get_current_user ();

//Удалить роль
$ current_user-> remove_role ('подписчик');

//Добавить роль
$ current_user-> add_role ('editor');
</code></pre></body></html>

ответил Brad Dalton 16 AMpThu, 16 Apr 2015 10:03:04 +030003Thursday 2015, 10:03:04
1

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

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

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

ответил Coen Jacobs 1 WedEurope/Moscow2010-12-01T14:16:58+03:00Europe/Moscow12bEurope/MoscowWed, 01 Dec 2010 14:16:58 +0300 2010, 14:16:58
1

вам нужно включить /wp-includes/registration.php, если вы используете код как отдельный сценарий. С уважением Ува

ответил 22 WedEurope/Moscow2010-12-22T17:50:19+03:00Europe/Moscow12bEurope/MoscowWed, 22 Dec 2010 17:50:19 +0300 2010, 17:50:19
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!
    }
?>
ответил Nour Edin Al-Habal 9 32016vEurope/Moscow11bEurope/MoscowWed, 09 Nov 2016 14:17:52 +0300 2016, 14:17:52
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' );
    }
?>
ответил Wasim Khan 7 AM00000050000005031 2017, 05:13:50

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132