Метод WP_Role::remove_cap()
используется для удаления возможности (capability) у определённой роли. Это изменение сохраняется в базе данных и остаётся активным до тех пор, пока возможность не будет снова добавлена вручную.
WP_Role::remove_cap( string $cap )
Параметры:
$cap
(строка, обязательный): Название возможности, которую необходимо удалить.
Описание:
Удаление возможности у роли пользователей происходит на постоянной основе — изменение сохраняется в базе данных (таблица wp_options
, поле wp_user_roles
). Чтобы избежать дублирующих изменений при последующих вызовах, функцию лучше выполнять при активации или деактивации темы/плагина.
Запрет чтения приватных постов для редакторов
Пример ниже удаляет возможность читать приватные посты у пользователей с ролью «редактор» (editor
):
function remove_editor_read_private_posts() {
// Получаем роль редактора
$role = get_role( 'editor' );
// Удаляем возможность читать приватные посты
$role->remove_cap( 'read_private_posts' );
}
// Выполняем функцию при активации плагина
add_action( 'init', 'remove_editor_read_private_posts' );
Удаление нескольких возможностей для роли редактора
Пример показывает, как удалить несколько возможностей сразу:
function wpcodex_set_capabilities() {
// Получаем объект роли
$editor = get_role( '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 );
}
}
// Выполняем функцию при инициализации
add_action( 'init', 'wpcodex_set_capabilities' );
Удаление возможности у конкретного пользователя
Удаление прав у пользователя происходит только для прав, которые были добавлены индивидуально (а не через роль). Пример показывает, как удалить возможность чтения приватных постов у пользователя с ID 123:
$user_id = 123;
$user = new WP_User( $user_id );
// Удаляем возможность, если она была добавлена напрямую пользователю
$user->remove_cap( 'read_private_posts' );
Примечания:
- Удаление прав роли: Если нужно убрать право для всех пользователей с конкретной ролью, используйте
remove_cap()
на уровне роли. Это затронет всех пользователей с этой ролью. - Индивидуальные права пользователей: Удалить можно только те права, которые были добавлены пользователю индивидуально, и они не затрагивают его роль.
Пример использования в плагине
Для удаления прав при активации/деактивации плагина можно использовать register_activation_hook()
:
register_activation_hook( __FILE__, 'remove_plugin_caps' );
function remove_plugin_caps() {
// Получаем роль автора
$role = get_role( 'author' );
// Удаляем возможность редактировать чужие посты
$role->remove_cap( 'edit_others_posts' );
}
Заключение
Метод WP_Role::remove_cap()
в WordPress используется для удаления возможностей у ролей, сохраняя изменения в базе данных. Он обеспечивает гибкость в управлении правами доступа, позволяя отключать определённые возможности для пользователей. Рекомендуется вызывать его при активации или деактивации плагинов и тем для избежания ненужных повторных изменений.