Плагин для удаления пунктов меню админ-панели в зависимости от роли пользователя?
Я тщательно искал плагин, который может удалять/скрывать пункты меню админ-панели, включая произвольные типы записей и таксономии, в зависимости от роли пользователя.
Все, что я пробовал, делают только глобальное скрытие, не учитывая роль пользователя. Другие более сложные плагины, такие как Adminize, не отображают произвольные типы записей или таксономии.
Нужно ли мне писать собственную функцию, или есть простой плагин, который я упустил из виду?

Обновление:
Перечитав ответ Майка, я задумался, что можно добавить новую возможность (capability) к роли и использовать её как условие для удаления, вот так:
// Сначала добавляем возможность к роли
// Получаем объект роли "administrator"
$role = get_role( 'administrator' );
// Добавляем возможность "see_all_menus" к этой роли
$role->add_cap( 'see_all_menus' );
// Затем удаляем пункты меню на основе этой возможности
function remove_those_menu_items( $menu_order ){
global $menu;
// Проверяем новую возможность с помощью current_user_can
if ( !current_user_can( 'see_all_menus' ) ) {
foreach ( $menu as $mkey => $m ) {
// Имя типа записи "portfolio"
$key = array_search( 'edit.php?post_type=portfolio', $m );
// Меню страниц
$keyB = array_search( 'edit.php?post_type=page', $m );
// Меню записей
$keyC = array_search( 'edit.php', $m );
if ( $key || $keyB || $keyC )
unset( $menu[$mkey] );
}
}
return $menu_order;
}
// Затем просто подключаем эту функцию к фильтру "menu_order"
add_filter( 'menu_order', 'remove_those_menu_items' );
Старый ответ
Я полностью согласен с тем, что написал Майк, но если вы не готовы к самостоятельному программированию, посмотрите плагин Admin Menu Editor.
Он позволяет устанавливать права доступа по уровням.

Существует плагин, созданный именно для этого вопроса: Hide Admin Menu. Этот плагин может:
- Скрывать пункты меню администратора в зависимости от роли пользователя, включая Администратора и пользовательские роли
- Также может скрывать элементы панели администратора
- Позволяет экспортировать/импортировать настройки для использования на других сайтах
Ещё одно преимущество этого плагина — он интуитивно понятен и прост в использовании.

Привет, @Wyck:
Я полностью понимаю твои потребности; у меня тоже были клиенты с аналогичными запросами. К сожалению, WordPress привязывает страницы меню админ-панели (разделы меню) и подстраницы меню (пункты меню) к возможностям (capabilities), а не к ролям.
Однако написать код плагина, который позволит назначать параметры меню админки ролям вместо возможностей, не так уж сложно. Твой скрипт может установить, что для всех пунктов меню требуется новая возможность 'not-allowed'
, а затем динамически присваивать стандартную возможность 'read'
для тех пунктов, к которым у текущего пользователя есть доступ на основе его роли.
Основной вопрос тогда сводится к тому, как организовать соответствие между ролями пользователей и пунктами меню? Для этого может потребоваться довольно сложный интерфейс в админке. Конечно, если ты хочешь просто захардкодить массив, определяющий, какие роли могут видеть те или иные пункты, это будет довольно просто...

Этот код оставит только несколько пунктов меню для пользователей, не являющихся администраторами. Версия от @Bainternet использует add_cap
, что должно выполняться только один раз — при активации темы или плагина.
add_action('admin_menu', function () {
if (current_user_can('administrator')) {
return;
}
/**
* Оставляет только определенные пункты меню и удаляет все остальные
*/
global $menu;
$hMenu = $menu;
foreach ($hMenu as $nMenuIndex => $hMenuItem) {
if (in_array($hMenuItem[2], array(
'index.php',
'edit.php?post_type=product',
))
) {
continue;
}
unset($menu[$nMenuIndex]);
}
}
