user_can()
Перевіряє можливості вказаного користувача, здійснювати вказану дію.
Функція дуже схожа на current_user_can() , відрізняється тим, що їй потрібно вказувати перший параметр – ID/об’єкт користувача, можливість якого потрібно перевірити.
Замість конкретного права користувача, можна вказати назву його ролі для перевірки. Але така практика не рекомендується, тому що в деяких випадках така перевірка на роль користувача може працювати неправильно!
Це функція обгортка для методу WP_User::has_cap() .
Також дивіться: функцію map_meta_cap .
WP_User::has_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 Перевіримо чи є користувач 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 | Formalizated existing and already documented …$args parameter by adding it до функції signature. |
user can WP 6.0.2
function user_can( $user, $capability, ...$args ) { if ( ! is_object( $user ) ) { $ user = get_userdata ($ user); } if (empty($user)) { // User is logged out, створіть anonymous user object. $user = new WP_User( 0 ); $ user-> init (new stdClass); } return $user->has_cap( $capability, ...$args ); }