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 7.0
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 );
}
}