Plugin pentru eliminarea elementelor din meniul Admin în funcție de rolul utilizatorului
Am căutat îndelung un plugin care să poată elimina/ascunde elementele din meniul Admin, inclusiv tipurile de postări personalizate și taxonomiile, în funcție de rolul utilizatorului.
Toate cele pe care le-am încercat realizează doar o ascundere globală, nu bazată pe rolul utilizatorului. Altele mai complexe, precum adminize, nu afișează tipurile de postări personalizate sau taxonomiile.
Trebuie să scriu propria mea funcție sau există un plugin simplu pe care l-am trecut cu vederea?

Actualizare:
Citind din nou răspunsul lui Mike, m-am gândit că poți adăuga o nouă capabilitate unui rol și să o folosești ca condiție de eliminare, așa:
// mai întâi adaugi capabilitatea rolului tău astfel
// obține obiectul rolului "author"
$role = get_role( 'administrator' );
// adaugă "see_all_menus" acestui obiect rol
$role->add_cap( 'see_all_menus' );
// apoi elimină elementele de meniu pe baza acesteia
function remove_those_menu_items( $menu_order ){
global $menu;
// verifică folosind noua capabilitate cu current_user_can
if ( !current_user_can( 'see_all_menus' ) {
foreach ( $menu as $mkey => $m ) {
//numele tipului de post personalizat "portfolio"
$key = array_search( 'edit.php?post_type=portfolio', $m );
//meniul paginilor
$keyB = array_search( 'edit.php?post_type=page', $m );
//meniul articolelor
$keyC = array_search( 'edit.php', $m );
if ( $key || $keyB || $keyC )
unset( $menu[$mkey] );
}
}
return $menu_order;
}
//Apoi doar conectează acea funcție la "menu_order"
add_filter( 'menu_order', 'remove_those_menu_items' );
Răspuns vechi
Sunt complet de acord cu ceea ce a postat Mike, dar dacă nu ești dispus să faci codare personalizată, uită-te la pluginul Admin Menu Editor.
Acesta îți permite să setezi drepturi de acces pe niveluri.

Există un plugin creat special pentru această întrebare: Hide Admin Menu. Acest plugin poate:
- Ascunde elementele din meniul de administrare în funcție de rolul utilizatorului, inclusiv Administrator și roluri personalizate
- Poate ascunde și elementele din bara de administrare
- Permite exportul/importul setărilor pentru a fi utilizate pe alte site-uri
Un alt lucru bun la acest plugin este că este intuitiv și ușor de utilizat.

Salut @Wyck:
Înțeleg perfect nevoile tale; am avut și eu clienți care au cerut același lucru. Din păcate, WordPress leagă paginile din meniul de administrare (adică secțiunile de meniu) și subpaginile de meniu (adică elementele de meniu) la capabilități, nu la roluri.
Cu toate acestea, nu ar fi prea greu să scrii niște cod pentru un plugin care să-ți permită să atribui opțiunile din meniul de administrare rolurilor; scriptul tău ar seta capabilitatea necesară pentru toate opțiunile de meniu să necesite o nouă capabilitate 'not-allowed'
, iar apoi codul tău ar atribui selectiv capabilitatea implicită 'read'
pentru fiecare opțiune de meniu unde rolul utilizatorului curent are capabilitatea definită.
Marea întrebare devine atunci cum să reprezinți maparea rolurilor utilizatorilor la opțiunile de meniu? Îmi imaginez că asta ar necesita o interfață de administrare destul de elaborată. Desigur, dacă vrei doar să codifici un array care definește ce roluri pot vedea ce, va fi destul de ușor...

Acest cod va menține doar câteva elemente de meniu pentru utilizatorii ne-administratori. Versiunea lui @Bainternet folosește add_cap
, care ar trebui făcută o singură dată, la activarea temei sau a plugin-ului.
add_action('admin_menu', function () {
if (current_user_can('administrator')) {
return;
}
/**
* Păstrează doar anumite elemente de meniu și elimină toate celelalte
*/
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]);
}
}
