Функция user_can()
используется для проверки, обладает ли указанный пользователь определенной возможностью (правом). Она является оберткой для метода WP_User::has_cap()
, и позволяет проверять как примитивные права (например, edit_posts
), так и мета-права (например, edit_post
для конкретной записи).
user_can( int|WP_User $user, string $capability, mixed $args = null ): bool
Параметры
- $user (число или объект) — ID пользователя или объект
WP_User
, возможности которого нужно проверить. Обязательный параметр. - $capability (строка) — Название возможности, которую необходимо проверить. Обязательный параметр.
- $args (смешанный тип) — Дополнительные параметры, которые используются при проверке мета-возможностей. Это может быть ID объекта (например, записи, комментария и т.д.). Необязательный параметр.
Возвращаемое значение
- bool — Возвращает
true
, если пользователь обладает указанной возможностью, иfalse
, если не обладает.
Пример использования
Функция позволяет проверять права пользователей на выполнение различных действий, таких как редактирование записей, удаление комментариев, активация плагинов и т.д.
Пример 1: Проверка мета-возможности — редактирование конкретного поста
Предположим, что нам нужно проверить, может ли пользователь с ID 123 редактировать запись с ID 1. В этом случае мы проверяем мета-возможность edit_post
.
if ( user_can( 123, 'edit_post', 1 ) ) {
echo 'Вы можете редактировать этот пост';
} else {
echo 'У вас нет прав на редактирование этого поста';
}
Пример 2: Проверка прав пользователя на уровне возможностей
Можно проверить права пользователя по его ID на выполнение административных задач, например, проверка прав на управление настройками (manage_options
):
$user_id = 12;
if ( user_can( $user_id, 'manage_options' ) ) {
echo "Пользователь с ID 12 является администратором и может управлять настройками.";
} else {
echo "Пользователь с ID 12 не имеет прав на управление настройками.";
}
Отличия от current_user_can()
Функция user_can()
похожа на current_user_can()
, с той разницей, что user_can()
принимает первым параметром ID или объект пользователя, права которого нужно проверить. Это позволяет проверять права не только для текущего пользователя, но и для любого другого пользователя, у которого есть уникальный ID.
Пример использования current_user_can()
:
if ( current_user_can( 'edit_posts' ) ) {
// текущий пользователь может редактировать посты
}
Пример использования user_can()
для другого пользователя:
$user_id = 5;
if ( user_can( $user_id, 'edit_posts' ) ) {
// пользователь с ID 5 может редактировать посты
}
Заключение
Функция user_can()
предоставляет гибкий способ проверки прав пользователей в WordPress. Она может использоваться как для проверки примитивных прав, так и мета-прав, и работает с любым пользователем, которого вы укажете, а не только с текущим. Это делает её незаменимой при разработке сложных плагинов и тем, где необходимо управление правами доступа различных пользователей.