add_role

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

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

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

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

Если вы создаете новую роль и указываете ей возможности, то убедитесь, что такой роли не существует. add_role() не будет работать если роль уже существует в базе данных.

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

Хуков нет.

Возвращает

Объект 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 разрешает редактировать посты
		'delete_posts' => false, // false запрещает удалять посты
		'upload_files' => true,  // может загружать файлы
	)
);
if ( null !== $result ) {
	echo 'Ура! Новая роль создана!';
}
else {
	echo 'Ой... Такая роль уже существует.';
}

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

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