- current_user_can - проверяет права текущего пользователя
- user_can - проверяет права указанного пользователя
- author_can - проверяет есть ли у автора указанного поста возможность или роль
Проверить права текущего пользователя
Функция "current_user_can" проверяет права текущего пользователя на совершение действия. Функция возвращает логические "true", если права есть, или "false", если их нет. У функции есть два аргумента:current_user_can( $capability, $args );
Первый аргумент "$capability" содержит значение в виде строки, а именно название возможности. Список возможностей от ролей можно найти в таблице ниже.Второй аргумент "$args" может содержать несколько типов данных. К примеру, он может содержать ID поста.
Список ролей в WordPress и их прав:
| Код права | Супер Админ |
Админ | Редактор | Автор | Участник | Подписчик |
|---|---|---|---|---|---|---|
| read | да | да | да | да | да | да |
| delete_posts | да | да | да | да | да | |
| edit_posts | да | да | да | да | да | |
| delete_published_posts | да | да | да | да | ||
| edit_published_posts | да | да | да | да | ||
| publish_posts | да | да | да | да | ||
| upload_files | да | да | да | да | ||
| delete_others_pages | да | да | да | |||
| delete_others_posts | да | да | да | |||
| delete_pages | да | да | да | |||
| delete_private_pages | да | да | да | |||
| delete_private_posts | да | да | да | |||
| delete_published_pages | да | да | да | |||
| edit_others_pages | да | да | да | |||
| edit_others_posts | да | да | да | |||
| edit_pages | да | да | да | |||
| edit_private_pages | да | да | да | |||
| edit_private_posts | да | да | да | |||
| edit_published_pages | да | да | да | |||
| manage_categories | да | да | да | |||
| manage_links | да | да | да | |||
| moderate_comments | да | да | да | |||
| publish_pages | да | да | да | |||
| read_private_pages | да | да | да | |||
| read_private_posts | да | да | да | |||
| unfiltered_html | да | да* | да* | |||
| activate_plugins | да | да** | ||||
| create_users | да | да* | ||||
| deactivate_plugins | да | да | ||||
| delete_plugins | да | да* | ||||
| delete_themes | да | да* | ||||
| delete_users | да | да* | ||||
| edit_dashboard | да | да | ||||
| edit_files | да | да* | ||||
| edit_plugins | да | да* | ||||
| edit_theme_options | да | да | ||||
| edit_themes | да | да* | ||||
| edit_users | да | да* | ||||
| export | да | да | ||||
| import | да | да | ||||
| install_languages | да | да* | ||||
| install_plugins | да | да* | ||||
| install_themes | да | да* | ||||
| list_users | да | да | ||||
| manage_options | да | да | ||||
| promote_users | да | да | ||||
| remove_users | да | да | ||||
| switch_themes | да | да | ||||
| update_core | да | да* | ||||
| update_languages | да | да* | ||||
| update_plugins | да | да* | ||||
| update_themes | да | да* | ||||
| manage_network_options | да | |||||
| manage_network_plugins | да | |||||
| manage_network_themes | да | |||||
| manage_network_users | да | |||||
| manage_network | да | |||||
| manage_sites | да | |||||
| setup_network | да | |||||
| upgrade_network | да |
** - Один сайт или можно включить в настройках
Пример простейшего использования для проверки прав на редактирование настроек сайта:
if( current_user_can( 'manage_options' ) ){
echo 'Вы можете редактировать настройки сайта';
}
Расспотрим способ использования на примере проверки прав на редактирование публикации под номером ID=9:
if( current_user_can( 'edit_post', 9 ) ){
echo 'Вы можете редактировать публикацию c ID=9';
}
Список прав пользователей в WordPress (в примере выше была проверка права "edit_post"):
| Символьный код | Описание права |
|---|---|
| delete_user | удаление пользователя |
| edit_user | изменение пользователя |
| delete_post | удаление публикации |
| delete_page | удаление страницы |
| edit_post | изменение публикации |
| edit_page | изменение страницы |
| edit_comment | изменение комментария |
| read_post | чтение публикации |
| read_page | чтение страницы |
| edit_term | изменение терминов |
| delete_term | удаление терминов |
| assign_term | назначение терминов |
| activate_plugin | активация плагинов |
| deactivate_plugin | деактивация плагинов |
| export_others_personal_data | экспорт персональных данных другого пользователя |
| erase_others_personal_data | удаление персональных данных другого пользователя |
| manage_privacy_options | изменение настроек приватности |
Проверить права текущего пользователя
Если необходимо проверить права для другого пользователя, а не текущего, то необходимо сделать функцию "user_can". Первым аргументом эта функция принимает ID пользователя (число), а вторым - роль, которую нужно проверить. Третий аргумент служит для передачи ID объекта, который нужно проверить.user_can( $user_id, $capability, $object_id );
Модифицируем предыдущие примеры для использования этой функции. Проверим может ли пользователь с ID=8 редактировать настройки сайта:
$user_id = 8; // проверим пользователя с ID=8
if( user_can($user_id, 'manage_options') ){
echo 'Пользователь с ID=8 может редактировать настройки сайта';
}
Сделаем проверку для этого же пользователя на возможность редактирования публикации с ID равным 73:
$user_id = 8; // проверим пользователя с ID=8
$post_id = 73; // проверим доступность публикации с ID=73
if( user_can($user_id, 'edit_post', $post_id ) ){
echo 'Пользователь с ID=8 может редактировать публикацию с ID=73';
}
Проверка роли автора
Для проверки роли автора публикации можно использовать функцию "author_can". Эта функция принимает два аргумента:author_can( $post_id, $capability );
Первый аргумент "$post_id" - это ID поста, автора которого нужно проверить. Второй аргумент "$capability" - это название роли для проверки. Приведём пример, где проверим возможность автора поста с ID равным 74 на публикацию постов:
$post_id = 74; // проверим автора поста с ID=74
if( user_can($post_id, 'publish_posts' ) ){
echo 'Автор поста с ID=74 может публикаовать посты';
}else{
echo 'Автору поста с ID=74 запрещено публикаовать посты';
}