WordPress: rimuovere i menu dell’amministrazione

Può risultare utile, a volte, “oscurare” alcuni menu dell’amministrazione di WordPress, soprattutto se si è sviluppato un sito/blog per un cliente e non si vuole permettere l’accesso a funzionalità particolarmente delicate. Esistono Plugin che svolgono questa già funzione ma, per avere un controllo personale e completo, vediamo come funziona in dettaglio questa caratteristica.
Come sempre sfruttiamo le utilissime Action messe a disposizione da WordPress, in questo caso admin_menu. Tramite la variabile globale $menu possiamo accedere alla lista dei menu dell’amministrazione. Possiamo individuare il menu da “eliminare” in due modi: tramite l’etichetta o tramite il link a cui punta (vedi parti commentati nell’esempio qui sotto). Nell’esempio proposto vengono “oscurate” le voci di menu Design, Impostazioni e Plugins:

1
2
3
4
5
6
7
8
9
10
11
12
13
function remove_menu_item() {
    global  $menu;
    // tramite label
    $removes = array( 'Design', 'Impostazioni', 'Plugins' );
    // tramite link
    // $removes = array( 'themes.php', 'options-general.php', 'plugins.php' );
    foreach( $removes as $todel )
        foreach($menu as $key => $sm) if($sm[0] == $todel ) { unset( $menu[$key] ); break; }
        // tramite link
        // foreach($menu as $key => $sm) if($sm[2] == $todel ) { unset( $menu[$key] ); break; }  
}
//
add_action('admin_menu',  'remove_menu_item');

L’uso del link come chiave per la rimozione ($sm[2] nelle parti commentate nel codice qui sorpra), è utile quando non si ha certezza della lingua – localizzazione – con cui è stato installato WordPress. Con questa tecnica, tuttavia, il menu è rimosso solo a livello di interfaccia, quindi sarà possibile ancora accedere alla pagina tramite una link diretto.

12 commenti a: “ ”

  1. 01 nov, 2008 wolly:

    Bellissimo tutorial.
    Ci chiedono spesso sul forum di supporto come fare a rimuovere i menu’ in bacheca però a livello utente.
    Se riuscissi ad aggiungere anche il controllo del livello utente e se ce lo consenti pubblicherei questo codice nel wiki.
    ciao

  2. 03 nov, 2008 camu:

    Ma dargli un account meno potente, no? :)

  3. 03 nov, 2008 wolly:

    @Camu non è questione di potenza dell’account, ci sono alcuni che vorrebbero che chi scrive sul loro blog veda solamente la parte per scrivere e che non possa vedere niente altro neppure i commenti.
    E’ una loro esigenza, giusta o sbagliata che sia, e dato che ce lo chiedono in molti preferisco dar loro una soluzione.
    ciao

  4. 07 nov, 2008 wolly il "Una pagina "post-new" personalizzata per collaboratori…":

    [...] la nuova versione di wordpress la 2.7 ha una pagina del genere. Il problema sarà poi inibire tutto il resto ma puoi provare questi script di udolog http://www.undolog.com/2008/11/01/wordpress-rimuovere-i-menu-dellamministrazione/ [...]

  5. 06 dic, 2008 alessio:

    bello, poi se viene collegato all’admin tiger plugin viene furi anche un bel pacchetto grafico per i clienti.

  6. 08 feb, 2009 split:

    Scusate ma non riesco a cavarmela con il codice…
    Ho questa esigenza descritta per limitare l’intervento sul blog. Essendo un club ogni persona vuole la sua parte di accesso ma ovviamente devo contenere gli interventi al blog.
    Pensavo con un plugin apposito ma non riesco a trovarlo e con il codice ho capito che si interviene su admin menu… Consigli perfavore?

  7. 23 nov, 2009 Peter:

    Scusami, ma dove inserire quel codice????
    Ringrazio in anticipo

  8. 23 nov, 2009 Giovambattista Fazioli:

    @Peter:

    Scusami, ma dove inserire quel codice????

    Puoi inserirlo nel file functions.php, che trovi nella cartella del tuo tema attivo. In alternativa, se stai sviluppando un tuo plugin, nel codice di quest’ultimo. In pratica la cosa importante è che questo codice venga eseguito almeno una volta… :D

  9. 24 nov, 2009 Peter:

    Grazie, sei se funzione anche metterlo in un plugins già esistente?
    No, perchè sto creando un servizio di webhosting in cui una perosna può richiedere la persone del propio blog basandosi sulla piattaforma WordPress (NON mu) vorrei nascondere,dal menù amministrativo il pulsante che manda alla gestione del plugins EasyAdsense così che l’ utente non possa modificare la pubblicità a suo piacimento.
    Sai se è possibile? Oppure in quale file protei mettere quel codice senza che venga cancellato quando viene aggiornato wordpress, plugins o template?
    Grazie ancora, attendo risposte

  10. 25 nov, 2009 Giovambattista Fazioli:

    @Peter:

    Grazie, sei se funzione anche metterlo in un plugins già esistente?

    Certo, puoi inserirlo – ovviamente – anche in un Plugin già esistente.

    @Peter:

    Sai se è possibile? Oppure in quale file protei mettere quel codice senza che venga cancellato quando viene aggiornato wordpress, plugins o template?

    Questa procedura serve proprio per nascondere alcuni controlli ad eventuali utenti che lavorano nel backend di WordPress. Per gli aggiornamenti, invece, devi trovare un “posto” che sicuramente non può venir sovrascritto da aggiornamenti. WordPress MU, ad esempio, ti semplificherebbe il compito in quanto ha la possibilià di “imporre” i Plugin a tutti i sotto-blog.
    Su un’installazione WordPress normale, dove è possibile aggiornare la versione, aggiornare il tema (e quindi sovrascrivere il file functions.php) e aggiornare i Plugin (e quindi eliminarli o disattivarli) non saprei dove posizione il codice… ci penso e ti faccio sapere.

  11. 25 nov, 2009 Peter:

    Inserire un file .htaccess nella root farà?

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre> // blocco generico
                   <code></code> // blocco generico
                   [cc_actionscript][/cc_actionscript] // Actionscript
                   [cc_actionscript3][/cc_actionscript3] // Actionscript 3
                   [cc_css][/cc_css] // CSS Style Sheet
                   [cc_html][/cc_html] // HTML
                   [cc_js][/cc_js] // Javascript
                   [cc_objc][/cc_objc] // Objective-C
                   [cc_php][/cc_objc] // PHP
                   [cc_sql][/cc_sql] // SQL