Come rimuovere completamente il menu di amministrazione?
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

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:

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)

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

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

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

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.

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

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.

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)

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

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;
}
}
