WP_Roles::remove_cap()
Видаляє право (можливість) у зазначеної ролі користувача або конкретного користувача.
Змінивши право один раз, зміна залишиться назавжди, доки не буде змінено ще раз. Ці налаштування зберігаються в БД (в таблицю wp_options
, поле wp_user_roles
), тому цю функцію потрібно запускати один раз при активації/деактивації плагіна або теми.
Це метод класу WP_User , тому він має викликатися з екземплярів цих класів, як у прикладах.
Список прав дивіться тут .
{} Це метод класу: WP_Roles{}
Хуків немає.
Повертає
null
. Нічого не вертає.
Використання
global $wp_roles; $wp_roles->remove_cap( $role, $cap ); // або $role = get_role( 'author' ); $role->remove_cap( $cap );
-
$role
(рядок) (обов’язковий) - Назва ролі: Super Admin, Administrator, Editor, Author, Contributor, Subscriber.
-
$cap
(рядок) (обов’язковий) -
Назва можливості.
Таблиця з ролями та його правами .
Приклади
#1 Заборонимо читання приватних постів, користувачам у ролі editor
Функцію необхідно викликати під час активації плагіна, тобто. один раз, а не постійно:
function remove_editor_read_private_posts() { // get_role повертає екземпляр класу WP_Role. $role = get_role( 'editor' ); $role->remove_cap( 'read_private_posts' ); } // Теж саме можна зробити через клас WP_Roles: function remove_editor_read_private_posts(){ global $wp_roles; $wp_roles->remove_cap( 'editor', 'read_private_posts' ); }
#2 Видалення кількох можливостей
Видалимо деякі можливості у всіх користувачів за участю “редактор” (editor):
// Викликайте функцію один раз, при активації плагіна/теми function wpcodex_set_capabilities() { // Отримуємо об'єкт ролі. $ editor = get_role ( 'editor'); // Список можливостей, які потрібно видалити у editor $caps = array( 'moderate_comments', 'manage_categories', 'manage_links', 'edit_others_posts', 'edit_others_pages', 'delete_posts', ); foreach ($caps as $cap) { $ editor-> remove_cap ( $ cap ); } }
#3 Видалимо можливість у конкретного користувача
Не можна видалити право користувача, якщо воно стосується прав його ролі! Видаляти можна права, тільки які були додані і виходять за межі його ролі. Наприклад користувачеві з правами автора, було додано право редагувати чужі пости. Якщо необхідно видалити право участі користувача, це право необхідно видаляти в самої участі. Але така зміна торкнеться всіх користувачів з цією роллю.
За умовчанням у користувачів немає прав, крім тих що йому дає його роль (ролей у користувача може бути одночасно кілька). Тому за замовчуванням у користувача неможливо видалити будь-які права.
Якщо необхідно обмежити користувача у правах і навіть не чіпати права його участі. То треба створити нову роль, передати їй всі необхідні права і встановити цю роль для користувача.
Видалимо можливість читання приватних постів у користувача з ID 5, тільки якщо таке право виходить за межі його ролі і воно було додано (делеговано) для користувача 5:
$user_id = 5; $user = new WP_User( $user_id ); $user->remove_cap( 'read_private_posts' );
список змін
З версії 2.0.0 | Введено. |
Код WP_Roles::remove_cap() WP Roles::remove cap WP 6.0.2
public function remove_cap( $role, $cap ) { if ( ! isset( $this->roles[ $role ] ) ) { return; } unset( $this->roles[ $role ]['capabilities'][ $cap ] ); if ( $this->use_db ) { update_option( $this->role_key, $this->roles ); } }