Plugin pentru eliminarea elementelor din meniul Admin în funcție de rolul utilizatorului

30 ian. 2011, 02:19:58
Vizualizări: 29.2K
Voturi: 6

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?

1
Comentarii

Încearcă acest plugin: Ascunde Panourile de Administrare)

User User
31 mai 2011 20:39:10
Toate răspunsurile la întrebare 4
2

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.

30 ian. 2011 02:55:26
Comentarii

Am încercat acest lucru, dar funcția de ascundere pare a fi o setare globală, este activată/dezactivată, fără control pe roluri de utilizator.

Wyck Wyck
30 ian. 2011 07:18:21

Ok, o nouă abordare, am actualizat răspunsul meu.

Bainternet Bainternet
30 ian. 2011 11:49:00
0

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.

28 aug. 2012 18:26:33
1

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...

30 ian. 2011 02:38:34
Comentarii

Mulțumesc Mike, poate o idee pentru un plugin dacă timpul permite, dar pentru moment cred că voi face ceva simplu și voi hardcoda un array, amuzant este că am postat asta în firul de funcții pe aici acum câteva săptămâni.

Wyck Wyck
30 ian. 2011 07:23:37
0

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]);
    }
}
19 iun. 2013 19:32:34