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


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.