Подскажите, как можно ограничить роль второго администратора в админ-панели?
Допустим на сайте зарегистрированы два администратора, второй нужен для тестирования и отладки сайта на wordpress.
Действия, которые нужно запретить для 2го администратора такие:
добавление новых страниц-записей, удаление существующих страниц-записей, установка плагинов-тем, удаление плагинов-тем (но просмотр установленных плагинов-тем должно быть возможно для 2го админа ).
Т.е. нужно удалить кнопку "Добавить новую" для записей и тем, или "Добавить новый" для плагинов и запретить удалять записи-плагины-темы.
Использовал такой код в небольшом плагине, но он не работает:
register_activation_hook( __FILE__, 'adminka_install' );
function adminka_install() {
//Удаление некоторых прав у пользователя user
remove_cap_user();
}
function remove_cap_user() {
$user_id = 3; // ID администратора, которго надо ограничить в правах
$user = new WP_User( $user_id );
$caps = array(
'delete_published_pages',
'delete_published_posts',
'delete_posts',
'delete_pages',
'publish_posts',
'upload_files',
'install_plugins'
);
foreach ( $caps as $cap ) {
$user->remove_cap( $cap );
}
}
Создайте новую роль (например, "Ограниченный Админ") и задайте ей только те права, которые хотите выдать. Новая роль создаётся функцией add_role()
Upd. вот пример создания новой роли на основе роли админа. Сразу оговорюсь, что право создания записей и кнопка "Добавить запись" выводится на основе анализа права пользователя редактировать записи (edit_posts
), на основе этого же права определяется право пользователя видеть страницу /wp-admin/edit.php
. То есть ограничить его в этом праве не получится. Выходом может служить ограничение права на публикацию записей (publish_posts
), в таком случае все созданные им записи будут отправляться на утверждение и нигде на фронтэнде не появятся, что, как я понимаю, частично решает задачу.
function create_small_admin() {
if (get_role('small_admin') == null) {
$user = new WP_User(1); // получим экземпляр класса пользователя с правами админа (как правило это пользователь с id=1)
$adm_caps = $user->get_role_caps(); // получим массив возможностей админа
$caps = array(
'edit_others_posts', // нельзя редактировать чужие записи
'delete_others_posts', // нельзя удалять чужие записи
'publish_posts', // как уже говорилось выше, право edit_posts отключает всё меню с записями, поэтому можно запретить пользователю публиковать созданные записи (они будут отправляться на утверждение)
'upload_files',
'install_plugins',
'delete_plugins',
'update_plugins',
'edit_plugins'
);
foreach ($caps as $cap) {
unset($adm_caps[$cap]); // удалим некоторые возможности
}
add_role('small_admin', 'Младший Администратор', $adm_caps); // создадим новую роль на основе роли админа, но с урезанными правами
$user = new WP_User(3);
$user->set_role('small_admin'); // установим новую роль для пользователя с id = 3 (то же самое можно и правильнее будет делать из админки)
}
}
add_action('init', 'create_small_admin');
Как итог - невозможность пользователя с ролью small_admin
редактировать чужие записи, устанавливать, обновлять, удалять и редактировать плагины, загружать файлы. Свою запись можно создать и отправить на утверждение, но не опубликовать.
ЗдравствуйтеПомогите с сортировкой массива
Почему после отправки корректных данных, файл datajson не дополняется?