Come rimuovere l'intero menu di amministrazione?


14

Devo personalizzare il pannello di amministrazione per il mio utente. Quindi, come posso rimuovere l'intero menu di amministrazione? Non rimuovere la voce di menu, intendo rimuovere completamente la barra dei menu verticale sinistra, includere il design del menu (ad es. Css, background..etc). Voglio che diventi vuoto.

Posso farlo con css hack. Ma preferisco usare hook per farlo. Qualche idea?

Grazie


Sono curioso. Se i tuoi utenti non hanno bisogno di accedere a nessuna delle voci del menu di amministrazione, perché devono accedere alla dashboard?
moraleida,

Mi chiedo quali siano le motivazioni ... Vuoi nasconderlo per ruoli / utenti specifici? Stai creando un menu personalizzato sulla barra di amministrazione (in alto)?
brasofilo,

1
Sì, vorrei personalizzare il menu di amministrazione. Non che l'attuale menu di amministrazione non sia abbastanza buono, è semplicemente troppo "wordpress". Non va bene per il marchio, secondo me.
dev-jim,

Si prega di controllare la mia risposta precedente qui; wordpress.stackexchange.com/questions/136058/…
numediaweb

Risposte:


16

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

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

//Remove top level admin menus
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' );
}


//Remove sub level admin menus
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' );
}

Schermata del menu a sinistra usando le 2 funzioni sopra:

inserisci qui la descrizione dell'immagine


3
Ho trovato un altro modo usando $GLOBALS['menu'] = array();. Dare null nell'array farà anche il lavoro.
dev-jim,

Dove lo metti?

Qualcuno ha notato le recenti bozze di quella schermata? ;)
acSlater

5

Seguendo l'esempio di /wp-admin/admin-header.php-> /wp-admin/menu-header.phpnon c'è nessun gancio per farlo.

Una soluzione è collegarsi admin_headed eseguire alcuni 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 per un chiarimento alla domanda, in cui viene chiarito che la motivazione sta marchiando l'area di amministrazione, questi sono i 4 plugin che uso per questo:

  • Amministra (nasconde blocchi di grandi dimensioni dell'interfaccia di WordPress, filtrando per ruolo)
  • Menu a discesa Admin di Ozh (tutto il menu Admin in un menu a discesa CSS guidato orizzontale)
  • Menu amministratore fisso (compagno perfetto per Ozh)
  • Admin Tweaks (sono l'autore di questo, e il suo scopo principale è personalizzare molte aree dell'interfaccia di amministrazione)

Se segui questa strada, ha più senso usare wp_enqueue_script()con admin_enqueue_scripthook.
mrwweb,

1
@mrwweb Anche quando si tratta di un inserimento così piccolo? Pensi che sia degno?
brasofilo,

Concordato. Piccoli inserimenti di script / stili sono più facili da eseguire admin_head.
chrisguitarguy,

Non mi piace usare jquery se non ho altra scelta. Cosa succede se i visitatori disabilitano il javascript sul proprio browser? Tuttavia, non è probabile che accada, ma c'è la possibilità lì. Comunque grazie per il consiglio.
dev-jim,

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

2

L'unico modo hook-friendly che conosco è utilizzare remove_menu_page()per ogni singola voce di menu. Anche allora, non so cosa accada alla barra di sinistra stessa (se crollerebbe fino a una larghezza di 0px o cosa). Anche con l'uso dei ganci, immagino che ad un certo punto vorrai accodare un foglio di stile di amministrazione per ripulire ciò che resta degli stili di markup del menu.

Starei attento a farlo. Ad esempio, se si rimuove "Impostazioni", non è possibile raggiungere tutti i plug-in che creano pagine di menu nel menu "Impostazioni". In generale, mi chiedo quanto sia davvero sostenibile rimuovere completamente il menu.


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

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

function remove_admin_menus(){
    global $menu;
    $menu = array();
}

Anche questa risposta è molto utile. È breve e funziona come un fascino, ad eccezione delle pagine dei menu create dai plugin. (che non dovrebbe essere un problema perché sono visibili solo per un amministratore)
Charles,

È una soluzione pratica, anzi, ma vale la pena dire che in realtà non bloccherà l'accesso a quelle pagine di amministrazione, ma le renderà invisibili nella barra di amministrazione. È meglio di una soluzione CSS per nascondere elementi, ovviamente, ma ancora imperfetto in termini di sicurezza: gli utenti esperti possono comunque accedere direttamente alle pagine di amministrazione modificando l'URL.
Marcos Buarque,

0

Miglioramento della soluzione di @brasofilo in quanto presenta un piccolo bug: la ricarica della pagina con il menu di connessione a Internet non migliore verrà visualizzata per un tempo molto breve. Per evitarlo ho aggiunto un po 'di più 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;

    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.