¿Plugin para eliminar elementos del menú de administración según el rol de usuario?
He buscado exhaustivamente un plugin que pueda eliminar/ocultar elementos del menú de administración, incluyendo tipos de contenido personalizados y taxonomías, basado en el rol del usuario.
Todos los que he probado solo realizan una ocultación global, no basada en el rol del usuario. Otros más complejos como adminize no muestran tipos de contenido personalizados ni taxonomías.
¿Tengo que escribir mi propia función o hay algún plugin simple que esté pasando por alto?

Actualización:
Al leer nuevamente la respuesta de Mike, me hizo pensar que puedes agregar una nueva capacidad a un rol y usarla como condición para la eliminación, así:
// Primero agrega la capacidad a tu rol de esta manera
// Obtén el objeto del rol "administrador"
$role = get_role( 'administrator' );
// Agrega "see_all_menus" a este objeto de rol
$role->add_cap( 'see_all_menus' );
// Luego elimina los elementos del menú basándote en eso
function remove_those_menu_items( $menu_order ){
global $menu;
// Verifica usando la nueva capacidad con current_user_can
if ( !current_user_can( 'see_all_menus' ) {
foreach ( $menu as $mkey => $m ) {
//Nombre del tipo de post personalizado "portfolio"
$key = array_search( 'edit.php?post_type=portfolio', $m );
//Menú de páginas
$keyB = array_search( 'edit.php?post_type=page', $m );
//Menú de entradas
$keyC = array_search( 'edit.php', $m );
if ( $key || $keyB || $keyC )
unset( $menu[$mkey] );
}
}
return $menu_order;
}
// Luego simplemente engancha esa función a "menu_order"
add_filter( 'menu_order', 'remove_those_menu_items' );
Respuesta anterior
Estoy completamente de acuerdo con lo que publicó Mike, pero si no estás listo para programación personalizada, echa un vistazo al plugin Editor de Menú de Administración.
Te permite establecer derechos de acceso por nivel.

Existe un plugin creado específicamente para esta pregunta: Hide Admin Menu. Este plugin puede:
- Ocultar elementos del menú de administración según el rol del usuario, incluyendo Administrador y roles personalizados
- También puede ocultar elementos de la barra de administración
- Permite exportar/importar configuraciones para usar en otros sitios
Otra ventaja de este plugin es que es intuitivo y fácil de usar.

Hola @Wyck:
Puedo entender perfectamente tus necesidades; he tenido clientes que pidieron lo mismo. Sin embargo, desafortunadamente WordPress vincula las páginas del menú de administración (es decir, secciones del menú) y las subpáginas del menú (es decir, elementos del menú) a capacidades, no a roles.
No obstante, no sería demasiado difícil escribir código para un plugin que te permita asignar opciones de menús de administración a roles en su lugar; tu script establecería que la capacidad requerida para todas las opciones del menú sea una nueva capacidad 'not-allowed'
y luego tu código asignaría selectivamente la capacidad predeterminada 'read'
a cada opción del menú donde el rol del usuario actual tenga la capacidad definida.
La pregunta más importante entonces sería ¿cómo representar el mapeo de roles de usuario a opciones del menú? Imagino que requeriría una interfaz de usuario de administración bastante elaborada. Claro que si solo quieres codificar un array que defina qué roles pueden ver qué, sería bastante fácil...

Esto mantendrá solo un par de elementos del menú para los no administradores. La versión de @Bainternet utiliza add_cap
, lo cual debería hacerse solo una vez, durante la activación del tema o plugin.
add_action('admin_menu', function () {
if (current_user_can('administrator')) {
return;
}
/**
* Mantener solo elementos específicos del menú y eliminar todos los demás
*/
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]);
}
}
