Функция user_can() в WordPress
Функция user_can()
используется для проверки, имеет ли определённый пользователь указанную возможность (capability).
Эта функция похожа на current_user_can()
, но в ней в качестве первого параметра передаётся ID пользователя или объект пользователя. Таким образом, мы можем проверить возможности конкретного пользователя.
В параметрах можно указать роль для проверки, но это не рекомендуется, так как может привести к ненадежным результатам.
Возврат Значения
Функция возвращает значение true
или false
, в зависимости от того, имеет ли пользователь указанную возможность.
Использование
user_can( $user, $capability );
$user
(int/WP_User) (обязательный) — ID пользователя или объект пользователя.$capability
(string) (обязательный) — имя возможности (capability). Список ролей и возможностей можно найти в документации WordPress.$object_id
... (int) — ID объекта (например, записи или комментария), для которого проверяется возможность. В этом случае$capability
должна быть мета-возможностью, а не простой возможностью; например,edit_post
, но неedit_posts
.
Чтение о мета-возможностях
Если вам нужно больше информации о мета-возможностях, смотрите функцию map_meta_cap()
. Она связывает мета-возможности с простыми возможностями на основе ID переданного объекта и имени мета-возможности, и затем эту простую возможность можно проверить against capabilities пользователя.
Примеры использовани��
1. Проверим, является ли пользователь с ID 3 администратором
$user_id = 3;
if ( user_can( $user_id, 'manage_options' ) ) {
// Пользователь имеет возможность управлять параметрами
}
2. Проверим, может ли пользователь удалить записи
global $user_ID;
if ( ! user_can( $user_ID, 'delete_posts' ) ) {
echo 'У вас нет такой возможности!';
}
3. Проверка, может ли пользователь с ID 141 редактировать запись с ID 1
Это пример проверки мета-возможностей.
if ( user_can( 141, 'edit_post', 1 ) ) {
echo 'Вы можете редактировать эту запись';
}
Изменения и обновления
- Версия 3.1.0: функция была введена.
- Версия 5.3.0: был формализован параметр
...$args
, добавив его в сигнатуру функции.
Код функции
Вот как выглядит сама функция:
function user_can( $user, $capability, ...$args ) {
if ( ! is_object( $user ) ) {
$user = get_userdata( $user );
}
if ( empty( $user ) ) {
// Пользователь не авторизован, создаем объект анонимного пользователя.
$user = new WP_User( 0 );
$user->init( new stdClass() );
}
return $user->has_cap( $capability, ...$args );
}
Связанные функции
Вот некоторые функции, которые связаны с ролями и возможностями (capabilities):
add_role()
— добавляет новую роль.author_can()
— проверяет, может ли автор выполнить определенное действие.current_user_can()
— проверяет возможности текущего пользователя.get_editable_roles()
— получает список редактируемых ролей.get_role()
— получает информацию о роли.grant_super_admin()
— предоставляет супер-администраторские права.is_super_admin()
— проверяет, является ли пользователь супер-администратором.map_meta_cap()
— связывает мета-возможности с простыми возможностями.remove_role()
— удаляет существующую роль.wp_roles()
— возвращает объект ролей.WP_Roles::add_cap()
— добавляет возможность к роли.WP_User::add_cap()
— добавляет возможность к пользователю.
Эти функции могут помочь в управлении пользователями и их возможностями в WordPress.