Роли уже достаточно долго являются неотъемлемой частью WordPress — много функций, связанных с управлением ими появились в версии 2.0.0. Несмотря на это долголетие, они редко использовались, и это позор, поскольку они позволяют легко настроить собственные типы пользователей (а также обладают способностью непосредственного управления ими). В этой статье вы узнаете все, что вам нужно чтобы использовать роли пользователей в WordPress и воспользоваться большей частью их невероятной встроенной функциональности.
Терминология
Основные термины которые вам следует знать, это “ роль” и “способность”. Способности являются ядром системы, они представляют собой вещи которые вы можете сделать. Пример возможности switch_themes
. Пользователь, который имеет такую возможность может изменить внешний вид сайта с помощью настроек отображения в админ-панели. Те, кто не имеют такой возможности не могу это сделать.
Роли это просто именованный набор возможностей. Представьте, что у вас есть такие возможности, как edit_post,
add_user
и так далее. Вместо перечисления всех 50 из них для каждого пользователя, которого вы хотели бы назначить администратором, просто присвоите каждому роль “admin”, а затем присвоите все возможности этой роли.
Стандартные настройки
По умолчанию, WordPress имеет шесть ролей и около 57 возможностей. Каждая роль имеет различное сочетание способностей, которые наделяют пользователей соответствующими правами и привилегиями.
Например, автор может редактировать и удалять свои посты, но не может контролировать, когда эти посты будут опубликованы (и не может удалить их , как только они опубликованы). Это потому, что у него есть способности edit_posts
и delete_posts
, но нет способностей publish_post
и delete_published_post
.
Стандартные настройки предлагаемые WordPress очень хорошо продумана и их не следует изменять, только добавлять.Если они изменены, в дальнейшем вы можете столкнуться с труднорешаемыми проблемами, как например, автор будет способен удалять посты с вашего сайта, или администратор будет не в состоянии изменить тему.
Когда нужны новые роли и способности
Новые роли обычно идут рука об руку с новыми способностями. Как правило, мы сначала создаем множество новых способностей, которые присваиваются администратору (и с тем же успехом новой роли). Давайте рассмотрим пример.
Если у вас большой сайт, скорее всего, у вас есть маркетинговая команда. Этой команде вовсе не обязательно иметь возможность редактировать и публиковать посты, но они нуждаются в доступе к рекламной статистике, поисковым тенденциям и т.д. Возможно, также было бы полезно позволить им управлять категориями и комментариями в целях SEO и удовлетворения клиентов, соответственно.
Наша первоочередная задача, это просмотр рекламной статистики и тенденции поиска. Это не что-то, что WordPress предлагает по умолчанию, поэтому давайте предположим, что оно построено в виде плагина. Давайте создадим способность под названием view_stats
. Эта способность будет отдана маркетологам и, конечно, администратору. Другим пользователям , как например, редакторы и авторы не нужно просматривать статистику (которая, во многих случаях, является конфиденциальной информацией), поэтому они не получат эту способность.
Наша вторая задача решить, какие другие возможности нужны нашим маркетологам. На основании наших предположений, они будут нуждаться в способностях просматривать и управлять ссылками, управлять категориями и модерировать комментарии (read
manage_links
manage_categories
и moderate_comments, соответственно)
.
Наконец, мы хотели бы использовать некоторые наброски кода, чтобы создать новую роль под названием “Маркетинг”, и назначить вышеупомянутые возможности для нее. Как только это сделано, мы можем назначить роль “Маркетинг” любому пользователю на страницах “Добавить пользователя” и “Редактировать профиль”.
Основные функции WordPress
Чтобы эффективно управлять ролями и способностями, все, что вам нужно, это пять очень простых функции:
add_role()
— Позволяет добавлять пользовательские ролиremove_role()
— Позволяет удалять пользовательские ролиadd_cap()
— Позволяет добавлять пользовательские способности для ролиremove_cap()
— Позволяет удалять пользовательские способности из списка доступных для ролиget_role()
— Получает информацию о роли, а также о связанных с ней способностях
Если вы хотите, чтобы посмотреть документацию этих функций, вы можете взглянуть на раздел Roles and Capabilities в Codex.
Реализация новых ролей и способностей
Полная реализация ролей и требует больше, чем просто пять функций, которые я упомянул. Нам также потребуется использовать функции для проверки способностей, нам нужны функций, которые доступны только для определенных ролей, и так далее.
Добавление ролей и способностей
$marketing = add_role( 'marketing', 'Marketing', array( 'read' => true, 'manage_links', 'manage_categories', 'moderate_comments', 'view-stats' )); $role = get_role( 'administrator' ); $role->add_cap( 'view-stats' );
Функция выше добавит наш новую роль «Маркетинг». Она добавляет четыре способности, которые уже включены в WordPress и пятую, которая является пользовательской способностью. Как вы можете видеть, не требуется специального кодирования для добавления пользовательских способностей, нужно просто включить их в массив при добавлении роли. Как только мы добавляем новую роль, мы обязательно добавляем новые способности также и для администратора.
Заметим, что функция add_role()
возвращает объект WP_Role
в случае успеха или NULL
если роль уже существует.
Поскольку приведенный выше код будет использоваться в плагине, лучший способ использовать его, это использовать хуки, и добавить возможности для администратора только при первоначальном создании роли.
add_action( 'admin_init', 'add_custom_role' ); function add_custom_role() { $marketing = add_role( 'marketing', 'Marketing', array( 'read' => true, 'manage_links', 'manage_categories', 'moderate_comments', 'view-stats' )); if( null !== $marketing ) { $role = get_role( 'administrator' ); $role->add_cap( 'view-stats' ); } }
Проверка способностей и ролей
Как только мы заимели собранную систему, мы можем проверить способности и функции. Это позволяет нам удостовериться, что только пользователи с подходящими способностями могут справиться с определенными задачами.
add_action('admin_menu', 'register_stats_Page'); function register_stats_Page() { add_menu_page( 'Marketing Info', 'Marketing Info', 'view_stats', 'marketing-info', 'show_marketing_info' ); } function show_marketing_info(){ if( ! current_user_can( 'view-stats' ) ) { die( 'You are not allowed to view this page' ); } echo "
This is the marketing stats page
"; }
Приведенный выше код добавит меню верхнего уровня в админку для нашей страницы маркетинговой статистики. Функция add_menu_page () позволяет задать способность (третий аргумент), которая определяет, будет ли отображается меню.
Обратите внимание, даже несмотря на то, что сама функция add_menu_page () принимает способность в качестве аргумента, нам все еще нужно проверить это в функции, которая отображает содержимое страницы.
Это подводит нас к нашим следующим двум функциям: current_user_can () и user_can ().
Если вы хотите проверить, имеет ли вошедший в данный момент в систему пользователь определенную способность, просто используйте следующий формат:
if( current_user_can( 'any_capability' ) ) { // The user has the capability } else { // The user does not have the capability }
Если вы хотите проверить, действительно ли определенный пользователь имеет определенную способность, используйте функцию user_can():
if( user_can( 45, 'any_capability' ) ) { // The user with the ID of 45 has the capability } else { // The user with the ID of 45 does not have the capability }
В дополнение к способностям, обе функции также могут проверять роли:
if( current_user_can( 'marketing' ) ) { // The current user is a marketing person } else { // The current user is not a marketing person }
Создание типов пользователей
Хотя это и не официальный термин, я называю различные роли типами пользователей, когда они требуют множества различных изменений в интерфейсе Скажем, вы делаете магазин тем, например. Наряду с администратором, который отвечает за все (и авторами, которые пишут в блоге компании), у вас также есть покупатели и продавцы. Обе эти группы — зарегистрированные пользователи вашего сайта, но для них потребуется несколько различающийся внешний вид.
Личная страница покупателя, скорее всего, будет показывать количество вещей, которые он купил, как часто он покупает вещи, и, когда вошел в систему, он же увидит список закачек.
Профиль продавца был бы списком его работ, списком наиболее популярных из них и так далее. После входа в систему, он, вероятно, посмотрит статистику продаж.
Выяснение ролей и прав доступа
Для простоты, пользователи либо покупают, либо продают и не могут делать и то, и другое. Давайте создадим две роли с набором способностей:
add_action( 'admin_init', 'add_custom_roles' ); function add_custom_roles() { $seller = add_role( 'seller', 'Seller', array( 'read' => true, 'delete_posts' => true, 'edit_posts' => true, 'delete_published_posts' => true, 'publish_posts' => true, 'upload_files' => true, 'edit_published_posts' => true, 'view_sales' => true, 'moderate_comments' => true )); $role = get_role( 'administrator' ); if( null !== $seller ) { $role->add_cap( 'view_sales' ); $role->add_cap( 'view_others_sales' ); } $buyer = add_role( 'buyer', 'Buyer', array( 'read' => true, 'add_payment' => true, 'download_resources' => true )); if( null !== $buyer ) { $role->add_cap( 'add_payment' ); $role->add_cap( 'add_others_payment' ); $role->add_cap( 'download_resources' ); $role->add_cap( 'download_others_resources' ); } }
Идея здесь в том, что продавцы похожи на авторов, которые будут хранить продаваемые лоты, в качестве сообщений. Таким образом, они получают возможности автора. Кроме того, они могут также просматривать статистику продаж собственных лотов.
В дополнение к просмотру лотов, покупатели могут также добавлять платежи и скачивать файлы, относящихся к покупаемым ими товарам.
Админы получают доступ ко всему этому, но, кроме того, они могут просматривать статистику любого другого пользователя, добавлять платежи на любой счет, и могут с …
Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров