- 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 запрещено публикаовать посты';
}