user_can()
Проверяет возможности указанного пользователя, совершать указанное действие.
Функция очень похожа на current_user_can(), отличается тем что ей нужно указывать первый параметр — ID/объект пользователя возможность которого нужно проверить.
Вместо названия конкретного права пользователя, можно указать название его роли для проверки. Но такая практика не рекомендуется, потому что в некоторых случаях такая проверка на роль пользователя может работать неправильно!
Это функция-обертка для метода WP_User::has_cap().
Смотрите также: функцию map_meta_cap() и хук map_meta_cap.
Хуков нет.
Возвращает
true|false. true или false, в зависимости от того есть ли указанные возможности у пользователя.
Использование
user_can( $user, $capability, $object_id, ... );
- $user(число/объект) (обязательный)
- ID или объект пользователя, права которого нужно проверить.
- $capability(строка) (обязательный)
- Название возможности или роли. Список возможностей и ролей смотрите здесь.
- $object_id, ...(число)
ID объекта (например поста или коммента) право которого нужно проверить. В этом случае в параметре $capability нужно указывать название мета права, а не примитивного права: например, edit_post, а не edit_posts.
О том как работают мета права читайте в описании map_meta_cap(), которая на основе переданного ID объекта и указанного мета права, превращает это мета право в примитивное право, а затем это примитивное право сравнивается со списком прав пользователя (включая список прав его роли).
Примеры
#1 Проверим может ли указанный пользователь с ID 141 изменить пост с ID 1
Это пример проверки мета права.
if( user_can( 141, 'edit_post', 1 ) ){
echo 'Вы можете редактировать этот пост';
} #2 Проверим является ли юзер 3 Администратором
$user_id = 3;
if( user_can( $user_id, 'manage_options' ) ){
// код
} #3 Проверим может ли текущий пользователь удалять посты
Это пример проверки примитивного права.
global $user_ID;
if( ! user_can( $user_ID, 'delete_posts' ) ){
echo "У вас нет права удалять посты!";
}
Список изменений
| С версии 3.1.0 | Введена. |
| С версии 5.3.0 | Formalized the existing and already documented ...$args parameter by adding it to the function signature. |
Код user_can() user can WP 6.9.1
function user_can( $user, $capability, ...$args ) {
if ( ! is_object( $user ) ) {
$user = get_userdata( $user );
}
if ( empty( $user ) ) {
// User is logged out, create anonymous user object.
$user = new WP_User( 0 );
$user->init( new stdClass() );
}
return $user->has_cap( $capability, ...$args );
}