Plugin per rimuovere elementi del menu Admin in base al ruolo utente?
Ho cercato ovunque un plugin che possa rimuovere/nascondere elementi del menu Admin, inclusi custom post type e tassonomie, in base al ruolo utente.
Tutti quelli che ho provato fanno solo un nascondimento globale, non basato sul ruolo utente. Altri più complessi come Adminize non mostrano i custom post type o le tassonomie.
Devo scrivere una funzione personalizzata o c'è un plugin semplice che mi sta sfuggendo?

Aggiornamento:
Rileggendo la risposta di Mike mi è venuto in mente che puoi aggiungere una nuova capability a un ruolo e usarla come condizione per la rimozione, quindi:
// prima aggiungi la capability al tuo ruolo in questo modo
// ottieni l'oggetto ruolo "author"
$role = get_role( 'administrator' );
// aggiungi "see_all_menus" a questo oggetto ruolo
$role->add_cap( 'see_all_menus' );
// poi rimuovi le voci di menu in base a quella capability
function remove_those_menu_items( $menu_order ){
global $menu;
// verifica usando la nuova capability con current_user_can
if ( !current_user_can( 'see_all_menus' ) {
foreach ( $menu as $mkey => $m ) {
//nome del custom post type "portfolio"
$key = array_search( 'edit.php?post_type=portfolio', $m );
//menu pagine
$keyB = array_search( 'edit.php?post_type=page', $m );
//menu articoli
$keyC = array_search( 'edit.php', $m );
if ( $key || $keyB || $keyC )
unset( $menu[$mkey] );
}
}
return $menu_order;
}
//Infine collega la funzione a "menu_order"
add_filter( 'menu_order', 'remove_those_menu_items' );
Vecchia risposta
Sono completamente d'accordo con quanto postato da Mike ma se non sei pronto per scrivere codice personalizzato Dai un'occhiata al plugin Admin Menu Editor.
Ti permette di impostare i diritti di accesso per livello.

C'è un plugin creato appositamente per questa esigenza: Hide Admin Menu. Questo plugin può:
- Nascondere le voci del menu di amministrazione in base al ruolo dell'utente, inclusi Amministratori e ruoli personalizzati
- Può nascondere anche le voci della barra di amministrazione
- Permette di esportare/importare le impostazioni per utilizzarle su altri siti
Un altro aspetto positivo di questo plugin è che è intuitivo e facile da usare.

Ciao @Wyck:
Posso certamente comprendere le tue esigenze; ho avuto clienti che hanno chiesto la stessa cosa. Sfortunatamente però, WordPress lega le pagine del menu di amministrazione (cioè le sezioni del menu) e le sottopagine del menu (cioè le voci del menu) alle capacità, non ai ruoli.
Tuttavia non sarebbe troppo difficile scrivere del codice per un plugin che ti permetta di assegnare le opzioni dei menu di amministrazione ai ruoli invece che alle capacità; il tuo script dovrebbe impostare la capacità richiesta per tutte le opzioni del menu in modo che richiedano una nuova capacità 'not-allowed'
e poi fare in modo che il tuo codice assegni selettivamente la capacità predefinita 'read'
a ogni opzione del menu per cui il ruolo dell'utente corrente ha la capacità definita.
La domanda più grande diventa allora come rappresentare la mappatura dei ruoli utente alle opzioni del menu? Potrei immaginare che questo richieda un'interfaccia utente di amministrazione piuttosto elaborata. Naturalmente, se vuoi semplicemente hardcodare un array che definisce quali ruoli possono vedere cosa, sarà abbastanza facile...

Questo manterrà solo un paio di voci di menu per gli utenti non amministratori. La versione di @Bainternet utilizza add_cap
, che dovrebbe essere eseguita solo una volta, durante l'attivazione del tema o del plugin.
add_action('admin_menu', function () {
if (current_user_can('administrator')) {
return;
}
/**
* Mantiene solo specifiche voci di menu e rimuove tutte le altre
*/
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]);
}
}
