WP_Roles::remove_cap()
Удаляет право (возможность) у указанной роли пользователя или у конкретного пользователя.
Изменив право один раз, изменение останется навсегда, пока не будет изменено еще раз. Эти настройки сохраняются в БД (в таблицу wp_options
, поле wp_user_roles
), поэтому эту функцию нужно запускать единожды при активации/деактивации плагина или темы.
Это метод класса WP_Roles, WP_Role и 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.5.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 ); } }