WordPress имеет механизм ролей и возможностей, или, иначе говоря, групп пользователей и их прав для того, чтобы контролировать поведение юзеров на сайте, особенно в административной части.
К примеру «Администраторы» — это группа пользователей, а switch_themes (возможность смены темы оформления) уже относится к правам этой группы.
Как обычно я начну от простого к сложному.
1. Роли
В WordPress по умолчанию уже существует 6 групп пользователей:
- Super Admin — суперадминистратор, который имеет право управлять сетью сайтов.
 - Administrator — администратор.
 - Editor — редактор, может публиковать и редактировать посты других пользователей.
 - Author — автор, может публиковать и редактировать собственные посты.
 - Contributor — участник, может писать и отправлять свои посты на модерацию.
 - Subscriber — подписчик, всё, что он может — это редактировать свой профиль.
 
Сразу после установки WordPress автоматически создается пользователь-администратор.
Также вы можете установить, какую роль нужно присваивать только что зарегистрированному пользователю. Это настраивается в «Настройки > Общие».

Изменить роль пользователя можно на странице его профиля или же на странице со всеми пользователями:

Чуть дальше я покажу, как можно удалить стандартные роли и создать собственную.
2. Возможности
В таблице для экономии места я не стал рассматривать роль суперадминистратора и подписчика. Суперадмин это по сути тот же администратор, только с правами управления сетью сайтов (WordPress Multisite). Чуть ниже я еще напишу про него. А вот про подписчиков не напишу, так как про них и так всё понятно — имеет только одну возможность read.
.yyy{background: #4B658C;
color: #FFF;
text-align: center;}
| Возможность | Admin | Editor | Author | Contributor | 
|---|---|---|---|---|
| Плагины | ||||
install_plugins установка новых плагинов | 
+ | |||
update_plugins обновление плагинов | 
+ | |||
activate_plugins даёт доступ к странице плагинов | 
+ | |||
edit_plugins возможность редактировать файлы плагинов | 
+ | |||
delete_plugins удаление плагинов | 
+ | |||
| Темы | ||||
install_themes установка новых тем | 
+ | |||
switch_themes изменение активной темы | 
+ | |||
edit_themes редактирование файлов темы | 
+ | |||
edit_theme_options изменение настроек темы | 
+ | |||
update_themes обновление тем | 
+ | |||
 delete_themes  удаление тем | 
+ | |||
| Настройки WordPress | ||||
update_core обновление движка | 
+ | |||
import / export возможность пользоваться функциями импорта и экспорта | 
+ | |||
manage_options изменение настроек сайта | 
+ | |||
edit_dashboard изменения на странице консоли | 
+ | |||
| Пользователи | ||||
create_users создание новых пользователей | 
+ | |||
edit_users редактирование пользователей | 
+ | |||
delete_users удаление пользователей | 
+ | |||
list_users доступ к списку пользователей | 
+ | |||
promote_users изменение ролей пользователей | 
+ | |||
remove_users удаление пользователей | 
+ | |||
| Комментарии | ||||
moderate_comments модерация комментариев | 
+ | + | ||
| Рубрики | ||||
manage_categories изменение рубрик | 
+ | + | ||
| Страницы | ||||
edit_pages редактирование страниц | 
+ | + | ||
edit_others_pages редактирование страниц, созданных другими редакторами | 
+ | + | ||
edit_published_pages редактирование опубликованных страниц | 
+ | + | ||
publish_pages публикация страниц | 
+ | + | ||
delete_pages удаление страниц | 
+ | + | ||
delete_others_pages удаление страниц других пользователей | 
+ | + | ||
delete_published_pages удаление опубликованных страниц | 
+ | + | ||
delete_private_pages удаление личных страниц | 
+ | + | ||
edit_private_pages редактирование личных страниц | 
+ | + | ||
read_private_pages просмотр личных страниц | 
+ | + | ||
| Записи | ||||
edit_others_posts редактирование постов других пользователей | 
+ | + | ||
delete_others_posts удаление записей других пользователей | 
+ | + | ||
delete_private_posts удаление постов, отмеченных как «Личное» | 
+ | + | ||
edit_private_posts редактирование личных постов | 
+ | + | ||
read_private_posts просмотр личных постов | 
+ | + | ||
edit_published_posts редактирование собственных опубликованных записей | 
+ | + | + | |
publish_posts публикация постов | 
+ | + | + | |
delete_published_posts удаление собственных опубликованных записей | 
+ | + | + | |
edit_posts редактирование собственных записей | 
+ | + | + | + | 
delete_posts удаление собственных записей | 
+ | + | + | + | 
| Другое | ||||
unfiltered_html возможность вставки HTML и JavaScript в посты, страницы, комментарии и виджеты | 
+ | + | ||
upload_files загрузка файлов | 
+ | + | + | |
read просмотр сайта | 
+ | + | + | + | 
Как и обещал, остановлюсь чуть подробнее на суперадминистраторах. Обычные администраторы имеют все права на управление своими сайтами. Суперадминистраторы же могут управлять любым сайтом в сети, а также всей сетью в целом.
У них есть несколько собственных возможностей:
- 
manage_networkдает доступ в консоль сети, - 
manage_sitesдоступ к странице управления сайтами сети, - 
manage_network_usersвозможность управления пользователями сети, - 
manage_network_themesуправление темами сети, - 
manage_network_optionsдоступ к параметрам сети; 
3. Уровни
Начиная с версии WordPress 3.0 уровни пользователей больше не используются!
4. Функции для работы с ролями и возможностями пользователей
add_role() — создание собственной роли
Функция заносит данные в базу, поэтому лучше всего её использовать только один раз, например при активации плагина или темы.
/* * допустим я добавлю этот код в файл плагина и сделаю так, чтобы он запускался при активации этого самого плагина */ register_activation_hook( __FILE__, 'true_new_role_plugin_activate' ); function true_new_role_plugin_activate() { $new_role = add_role( 'comm_moderator', // название роли __( 'Comment Moderator' ), // отображаемое название роли (модератор комментариев) array( // массив возможностей, true - разрешено, false - запрещено 'read' => true, // ну это понятно 'moderate_comments'=> true // разрешим модерировать комментарии ) ); if ( null !== $result ) { // смотрим результат // роль успешно создана } else { // если null, то значит роль уже существует } }  | 
remove_role() — удаление ролей
Также, как и add_role(), функция изменяет содержимое базы данных — а значит не нужно просто тупо вставлять её в functions.php.
В примере удалим роль, созданную в прошлой главе:
remove_role('comm_moderator'); // в качестве параметра указываем название роли и всё, дело сделано  | 
get_role() — получение информации о группе пользователей
В случае успеха возвращает объект WP_Role (который состоит преимущественно из возможностей роли), в случае неудачи — null.
$my_role = get_role( 'comm_moderator' ); // указываем роль, которая нам нужна print_r( $my_role ); // так можно вывести содержимое объекта  | 
add_cap() и remove_cap() — добавление и удаление возможностей
Благодаря этим функциям вы можете добавить или удалить права для пользователей определенной роли или даже для пользователей с определенными ID.
Эти функции также изменяют содержимое базы данных, поэтому в качестве примера мы повесим их на активацию / деактивацию темы.
function true_author_caps(){ global $pagenow; $role = get_role( 'author' ); // к примеру возьмем роль автора // $role = new WP_User( $user_id ); таким образом мы можем взять конкретного пользователя if ( 'themes.php' == $pagenow && isset( $_GET['activated'] ) ){ // если тема была активирована $role->add_cap( 'edit_others_posts' ); // разрешаем авторам редактировать посты других авторов } else { // если тема деактивирована $role->remove_cap( 'edit_others_posts' ); } } add_action( 'load-themes.php', 'true_author_caps' ); // вешаем функцию на хук  | 
Источник: misha.blog