Come rimuovere completamente il menu di amministrazione?

14 mag 2012, 20:38:07
Visualizzazioni: 20.9K
Voti: 14

Ho bisogno di personalizzare il pannello di amministrazione per il mio utente. Come posso rimuovere completamente il menu di amministrazione? Non intendo rimuovere solo le voci del menu, ma l'intera barra verticale sinistra del menu, incluso il design (es. css, sfondo, ecc). Vorrei che diventasse vuoto.

Posso farlo con un hack CSS, ma preferisco utilizzare gli hook per farlo. Qualche idea?

Grazie

4
Commenti

Mi chiedo. Se i tuoi utenti non hanno bisogno di accedere a nessuna delle voci del menu di amministrazione, perché hanno bisogno di accedere alla dashboard?

moraleida moraleida
15 mag 2012 04:35:02

Mi interrogo sulle motivazioni... Vuoi nasconderlo per ruoli/utenti specifici? Stai creando un menu personalizzato della Admin Bar (in alto)?

brasofilo brasofilo
15 mag 2012 04:49:53

Sì, vorrei personalizzare il menu di amministrazione. Non che l'attuale menu di amministrazione non sia abbastanza buono, è solo che ha un feeling troppo "wordpress". Non è adatto al branding, secondo me.

dev-jim dev-jim
15 mag 2012 14:05:43

Per favore controlla la mia risposta precedente qui; http://wordpress.stackexchange.com/questions/136058/how-to-remove-admin-menu-pages-inserted-by-plugins/160523#160523

numediaweb numediaweb
7 set 2014 18:46:32
Tutte le risposte alla domanda 5
2
16

L'hook corretto da utilizzare è admin_menu e poi creare una funzione per rimuovere i menu che si desidera eliminare. Le seguenti 2 funzioni rimuovono tutti i menu.

add_action( 'admin_menu', 'remove_admin_menus' );
add_action( 'admin_menu', 'remove_admin_submenus' );

//Rimuove i menu principali di amministrazione
function remove_admin_menus() {
    remove_menu_page( 'edit-comments.php' );
    remove_menu_page( 'link-manager.php' );
    remove_menu_page( 'tools.php' );
    remove_menu_page( 'plugins.php' );
    remove_menu_page( 'users.php' );
    remove_menu_page( 'options-general.php' );
    remove_menu_page( 'upload.php' );
    remove_menu_page( 'edit.php' );
    remove_menu_page( 'edit.php?post_type=page' );
    remove_menu_page( 'themes.php' );
}


//Rimuove i sottomenu di amministrazione
function remove_admin_submenus() {
    remove_submenu_page( 'themes.php', 'theme-editor.php' );
    remove_submenu_page( 'themes.php', 'themes.php' );
    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=post_tag' );
    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=category' );
    remove_submenu_page( 'edit.php', 'post-new.php' );
    remove_submenu_page( 'themes.php', 'nav-menus.php' );
    remove_submenu_page( 'themes.php', 'widgets.php' );
    remove_submenu_page( 'themes.php', 'theme-editor.php' );
    remove_submenu_page( 'plugins.php', 'plugin-editor.php' );
    remove_submenu_page( 'plugins.php', 'plugin-install.php' );
    remove_submenu_page( 'users.php', 'users.php' );
    remove_submenu_page( 'users.php', 'user-new.php' );
    remove_submenu_page( 'upload.php', 'media-new.php' );
    remove_submenu_page( 'options-general.php', 'options-writing.php' );
    remove_submenu_page( 'options-general.php', 'options-discussion.php' );
    remove_submenu_page( 'options-general.php', 'options-reading.php' );
    remove_submenu_page( 'options-general.php', 'options-discussion.php' );
    remove_submenu_page( 'options-general.php', 'options-media.php' );
    remove_submenu_page( 'options-general.php', 'options-privacy.php' );
    remove_submenu_page( 'options-general.php', 'options-permalinks.php' );
    remove_submenu_page( 'index.php', 'update-core.php' );
}

Screenshot del menu laterale utilizzando le 2 funzioni sopra:

Menu laterale di amministrazione WordPress pulito

15 mag 2012 06:09:22
Commenti

Ho trovato un altro modo utilizzando $GLOBALS['menu'] = array();. Anche assegnare null all'array funziona.

dev-jim dev-jim
15 mag 2012 14:13:05

Dove lo inserisci?

User User
17 lug 2013 17:22:50
6

Seguendo l'esempio di /wp-admin/admin-header.php -> /wp-admin/menu-header.php non esiste un hook per farlo.

Una soluzione è agganciarsi a admin_head e aggiungere del CSS + jQuery

add_action('admin_head', 'wpse_52099_script_enqueuer');
function wpse_52099_script_enqueuer(){
    if(!current_user_can('administrator')) {
        echo <<<HTML
        <style type="text/css">
        #wpcontent, #footer { margin-left: 0px; }
        </style>
        <script type="text/javascript">
        jQuery(document).ready( function($) {
            $('#adminmenuback, #adminmenuwrap').remove();
        });     
        </script>
HTML;
    }
}

[aggiornamento]
Come chiarimento alla domanda, dove si capisce che la motivazione è personalizzare l'area di amministrazione, questi sono i 4 plugin che uso per questo scopo:

  • Adminimize (nasconde grandi porzioni dell'interfaccia di WordPress, filtrando per ruolo)
  • Ozh' Admin Drop Down Menu (tutto il menu di amministrazione in un menu a discesa orizzontale basato su CSS)
  • Admin Menus Fixed (compagno perfetto per quello di Ozh)
  • Admin Tweaks (sono l'autore di questo plugin, e il suo scopo principale è personalizzare molte aree dell'interfaccia di amministrazione)
15 mag 2012 04:42:04
Commenti

Se scegli questa strada, ha più senso usare wp_enqueue_script() con l'hook admin_enqueue_script.

mrwweb mrwweb
15 mag 2012 04:55:30

@mrwweb Anche quando si tratta di un'inserzione così piccola? Pensi ne valga la pena?

brasofilo brasofilo
15 mag 2012 05:01:37

Concordo. Le piccole inserzioni di script/stili sono più facilmente gestibili con admin_head.

chrisguitarguy chrisguitarguy
15 mag 2012 06:18:32

Non mi piace usare jQuery a meno che non abbia altre scelte. Cosa succede se i visitatori disabilitano JavaScript nel loro browser? Anche se è improbabile che accada, c'è comunque la possibilità. Comunque grazie per il consiglio.

dev-jim dev-jim
15 mag 2012 14:10:46

Nel mio esempio, sarà una questione di rimozione doppia nascondendo anche i 2 div nel CSS.

brasofilo brasofilo
15 mag 2012 15:06:13

Questo è perfetto. Solo per completezza, dobbiamo eliminare il margine aggiunto a sinistra quando la dimensione dello schermo è più piccola. Quindi nella parte CSS, basta aggiungere: .auto-fold #wpcontent, .auto-fold #wpfooter {margin-left: 0;}

Christine Cooper Christine Cooper
5 mag 2015 18:40:10
Mostra i restanti 1 commenti
1

L'unico modo compatibile con gli hook che conosco è utilizzare remove_menu_page() per ogni singola voce del menu. Anche in questo caso, non so cosa succederebbe alla barra laterale stessa (se collasserebbe a 0px di larghezza o altro). Anche utilizzando gli hook, immagino che ad un certo punto vorrai caricare un foglio di stile per l'amministrazione per ripulire ciò che rimane degli stili del markup del menu.

Sarei cauto nel fare questo. Ad esempio, se rimuovi "Impostazioni", allora qualsiasi plugin che crea pagine del menu nella sezione "Impostazioni" non potrà essere raggiunto. In generale, mi chiedo quanto sia realmente sostenibile rimuovere completamente il menu.

14 mag 2012 21:40:48
Commenti

Sono sicuro che stesse cercando un modo per rimuovere il menu per gli utenti regolari, non per gli amministratori. :)

Christine Cooper Christine Cooper
18 mar 2015 17:56:44
2
add_action( 'admin_menu', 'remove_admin_menus' );

function remove_admin_menus(){
    global $menu;
    $menu = array();
}
16 apr 2016 07:13:21
Commenti

Anche questa risposta è molto utile. È breve e funziona perfettamente, tranne che per le pagine del menu create dai plugin. (il che non dovrebbe essere un problema perché sono visibili solo per un amministratore)

Charles Charles
26 apr 2018 16:39:33

È effettivamente una soluzione pratica, MA vale la pena dire che non bloccherà realmente l'accesso a quelle pagine di amministrazione, le renderà solo invisibili nella barra di amministrazione. Certo, è meglio di una soluzione CSS per nascondere gli elementi, ma comunque imperfetta in termini di sicurezza: utenti esperti possono ancora accedere direttamente alle pagine di amministrazione modificando l'URL.

Marcos Buarque Marcos Buarque
9 giu 2018 17:47:53
0

Miglioro la soluzione di @brasofilo in quanto presenta un piccolo bug - al ricaricamento della pagina con una connessione internet non ottimale il menu apparirà per un brevissimo istante. Per evitarlo ho aggiunto un po' più di CSS:

add_action('admin_head', 'wpse_52099_script_enqueuer');

function wpse_52099_script_enqueuer() {

    if(!current_user_can('administrator')) { 

echo <<<HTML
<style type="text/css">
#wpcontent, #footer { margin-left: 0px !important; }
#adminmenuback, #adminmenuwrap { display: none !important; }
</style>
<script type="text/javascript">
jQuery(document).ready( function($) {
    $('#adminmenuback, #adminmenuwrap').remove();
});
</script>
HTML;

    }
}
30 mag 2016 22:29:02