WP_Roles::remove_cap() WP 2.0
Удаляет возможность у указанной роли пользователя или у конкретного пользователя.
Изменив возможность один раз, изменение останется навсегда, пока не будет переменено еще раз.
Эти настройки сохраняются в БД (в таблицу wp_options, поле wp_user_roles), поэтому эту функцию нужно запускать единожды при активации/деактивации плагина или темы.
remove_cap() не публичная функция - это метод класса WP_Roles, WP_Role и WP_User, поэтому она должна вызываться из экземпляров этих классов, как показано в примерах.
Хуков нет.
Возвращает
Ничего не возвращает.
Использование
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' );
Добрый день. Подскажите как вернуть стандартные роли пользователей вордпресс после удаления плагина User Role Editor. Он видимо внес изменения в БД
Установите его обратно и там есть кнопка «RESET»: В Пользователи > User Role Editor. Попробуйте ею воспользоваться...
Здравствуйте, скажите пожалуйста:
Открой User Role Editor, переключись там на роль Редактор и отмени ненужные права (убери галку). Эта статья вам вообще не нужна...
Правка чужих записей это права: edit_others_posts, edit_others_pages
Удаление чужих записей: delete_others_posts, delete_others_pages
Спасибо
Подскажите пожалуйста в каком хуке прописывать этот код?
after_setup_theme
,init
,admin_init
- > не работаютВ примере была ошибка! Поправил. Спасибо за коммент!
Пояснения:
Нельзя удались право пользователя, если оно относится к правам его роли! Удалять можно права, только которые были ему добавлены и выходят за пределы его роли. Например юзеру с правами автора, было добавлено право редактировать чужие посты. Если нужно удалить право роли юзера, то это право нужно удалять у самой роли.
По умолчанию у юзеров нет прав, кроме тех что ему дает его роль (ролей у юзера может быть одновременно несколько). Поэтому по умолчанию у юзера невозможно удалить какие-либо права.
Если нужно ограничить юзера в правах и при этом не трогать права его роли. То нужно создать новую роль, передать ей все необходимые права и установить эту роль для юзера.