WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

add_role() WP 2.0

Добавляет новую роль в WordPress.

Функция должна быть вызвана всего один раз. Потому что она изменяет данные в базе данных (таблица wp_options, поле wp_user_roles). Поэтому лучше изменять их во время активации/деактивации плагина или темы, см. пример.

Когда вызывать

Перед тем как добавлять или изменять роль, убедитесь что глобальная переменная $wp_roles доступна. Лучше всего использовать хуки активации плагинов или тем, чтобы добавить новую роль. За хук активации плагина отвечает функция: register_activation_hook().

Удаление существующей роли

Если вы создаете новую роль и указываете ей возможности, то убедитесь, что такой роли не существует. Эта функция не будет работать если роль уже существует в базе данных.

Вариант решения такой проблемы, перед созданием роли её можно удалить, используя функцию remove_role(), в которой указать создаваемую вами роль.

Работает на основе: wp_roles(), WP_Roles()

Хуков нет.

Возвращает

Объект WP_Role, если удалось добавить роль и null, если не удалось.

Использование

add_role( $role, $display_name, $capabilities );
$role(строка) (обязательный)
Название роли: administrator, editor, author, contributor, subscriber.
$display_name(строка) (обязательный)
Отображаемое имя для роли: Администратор, Автор, Подписчик и т.д.
$capabilities(массив)
Массив с возможностями новой роли. Возможности по умолчанию смотрите тут.
По умолчанию: array()

Примеры

#1. Создадим новую роль

Роль будет называться basic_contributor, а отображаться будет как "Основной участник".

Код должен быть запущен только один раз! Не оставляйте его работать постоянно!

$result = add_role( 'basic_contributor', 'Основной участник',
	array(
		'read'         => true,  // true разрешает эту возможность
		'edit_posts'   => true,  // true разрешает редактировать посты
		'upload_files' => true,  // может загружать файлы
	)
);
if ( null !== $result ) {
	echo 'Ура! Новая роль создана!';
}
else {
	echo 'Ой... Такая роль уже существует.';
}

#2 Создание новой роли при активации плагина

register_activation_hook( __FILE__, 'add_roles_on_plugin_activation' );
function add_roles_on_plugin_activation() {
	add_role('custom_role', 'Custom Subscriber', array( 'read' => true, 'level_0' => true ) );
}

#3 Создание новой роли при активации темы и удаление роли при деактивации темы

// Удаляем роль при деактивации нашей темы
add_action( 'switch_theme', 'deactivate_my_theme' );
function deactivate_my_theme() {
	remove_role( 'basic_contributor' );
}

// Добавляем роль при активации нашей темы
add_action( 'after_switch_theme', 'activate_my_theme' );
function activate_my_theme() {
	add_role( 'basic_contributor', 'Основной участник',
		[
			'read'         => true,  // true разрешает эту возможность
			'edit_posts'   => true,  // true разрешает редактировать посты
			'upload_files' => true,  // может загружать файлы
		]
	);
}

Подробности читайте в описании к хукам switch_theme и after_switch_theme.

#4 Наследуем возможности роли "Автор"

// Получим объект данных роли "Автор"
$author = get_role( 'author' );

// Создадим новую роль и наделим её правами "Автора"
add_role( 'project_manager', 'Руководитель проекта', $author->capabilities );

Список изменений

С версии 2.0.0 Введена.

Код add role: wp-includes/capabilities.php WP 5.3

<?php
function add_role( $role, $display_name, $capabilities = array() ) {
	if ( empty( $role ) ) {
		return;
	}
	return wp_roles()->add_role( $role, $display_name, $capabilities );
}

Cвязанные функции

Из метки: Роли и возможности (role capabilities)

7 комментов
  • campusboy3434 www.youtube.com/c/wpplus

    А можно ко 2 примеру дописать условие проверки? А то боюсь ошибиться здесь. К примеру,если этот пользователь относится к этой роли - запретить/разрешить что-либо.

    И ещё вопросик: где в базе находятся записи о той или иной роли?

    Ответить11.Мар.2016 в 15:36 #
    • Kama7641

      ко 2 примеру дописать условие проверки?

      Не понял, во втором примере ведь просто создается дополнительная роль. Причем тут пользователь?

      Создал роль, добавил эту роль какому-то пользователю. Дальше проверяешь эту роль у юзера, через current_user_can('роль'). Но current_user_can для роли почему-то не рекомендуется. Поэтому можешь использовать функцию is_user_role( $role ) из заметок в описании: current_user_can()

      где в базе находятся записи о той или иной роли?

      Опция wp_user_roles в таблице опций, где wp_ префикс БД.

      1
      Ответить12.Мар.2016 в 00:02 #
      • campusboy3434 www.youtube.com/c/wpplus

        Не понял, во втором примере ведь просто создается дополнительная роль. Причем тут пользователь?

        Не причем, я просто интересовался, как сделать желаемое. За справку спасибо, на все вопросы получил ответы! thank_you

        Ответить12.Мар.2016 в 00:48 #
      • Andy gym.in.ua

        В профиле юзера нет данной роли:

        function mpg_add_role(){
        
        	add_role('new',
        		'Новый',
        			array(
        				'read_post'     => true,
        				'edit_posts'    => true,
        				'delete_posts'  => true,
        				'publish_posts' => true
        			)
        	);
        }
        register_activation_hook( __FILE__, 'mpg_add_role' );

        что не так?

        Ответить23.Янв.2019 в 16:10 #
        • campusboy3434 www.youtube.com/c/wpplus

          Куда Вы это прописали и что сделали?

          Ответить23.Янв.2019 в 21:06 #
          • Andy gym.in.ua

            В основной файл плагина. пробовал деактивировать и активировать плагин, но роль не появляется в списках выбора.

            Ответить24.Янв.2019 в 12:11 #
  • Никак не могу понять, почему не подхватывает перевод.
    add_role('site_manager', __('Manager', 'site')...
    Возможно, из-за того, что файлы локализации загружаются позже. Не понятно тогда, ведь, как я понимаю если add_role происходит в момент активации плагина, то как запустить файлы локализации раньше этого события?

    Ответить19.Дек.2017 в 18:06 #
Здравствуйте, !     Войти . Зарегистрироваться