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


10

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

Ответы:


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

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

С уважением .


8

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

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

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

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


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

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

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

  • редактор

  • автор

  • участник

  • подписчик


1

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

//Make 'Client' a default role

update_option('default_role','client');

2
Почему?? Нет смысла размещать ваш код где-то, не зная, что он делает или как он работает
Питер Гусен,

Это не хорошее решение. Это запустит запрос на обновление, если не вводить специальные действия для каждого запроса.
Мацей Папроцки
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.