Как программно установить роль по умолчанию для новых пользователей?

10

Я бы хотел, чтобы у новых пользователей блога была пользовательская роль, а не подписчик. Как мне установить это программно? Я знаю, что это можно изменить из бэкэнда.

jayarjo
источник

Ответы:

13

Это позволяет плагинам легко захватывать роль по умолчанию, пока они активны.

// Hijack the option, the role will follow!
add_filter('pre_option_default_role', function($default_role){
    // You can also add conditional tags here and return whatever
    return 'subscriber'; // This is changed
    return $default_role; // This allows default
});

Я использую его, чтобы убедиться, что некоторые плагины, которым нужны роли подписчика, получают его независимо от попыток администратора изменить его :)

С уважением .

EarnestoDev
источник
8

Когда новый пользователь создается с помощью wp_insert_user()функции, роль устанавливается с помощью set_role()метода Userкласса и устанавливается как роль пользователя по умолчанию.

Роль пользователя по умолчанию извлекается из базы данных get_option('default_role')и может быть установлена ​​через панель администратора, выбрав «Настройки»> «Основные»> «Роль нового пользователя по умолчанию».

Если вы зарегистрировали свою новую роль (используя add_role(), она должна быть доступна для выбора).

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

soulseekah
источник
1
Я отмечу ваш ответ как правильный, хотя реальный ответ оказался таким же простым, как update_option ('default_role', 'custom_role_name') при активации плагина.
Джаярджо
Рад был помочь.
soulseekah
4

После того, как вы создали пользователя с помощью

$user_id = wp_create_user( $user_login, $pas1, $user_email );

Создать объект пользователя

$user = new WP_User($user_id);

Затем установите роль

$user->set_role('editor');

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

  • администратор

  • редактор

  • автор

  • участник

  • подписчик

Delphi Electronice
источник
1

Поместите это в Pluging или functions.php вашей темы

//Make 'Client' a default role

update_option('default_role','client');
user80490
источник
2
Почему?? Нет смысла размещать ваш код где-то, не зная, что он делает или как он работает
Питер Гусен,
Это не хорошее решение. Это запустит запрос на обновление, если не вводить специальные действия для каждого запроса.
Мацей Папроцки