¿Cómo eliminar todo el menú de administración?
Necesito personalizar el panel de administración para mi usuario. Entonces, ¿cómo elimino todo el menú de administración? No me refiero a eliminar elementos del menú, sino a eliminar completamente la barra vertical del menú izquierdo, incluyendo el diseño del menú (por ejemplo, css, fondo, etc.). Quiero que quede en blanco.
Puedo hacerlo con un hack de CSS. Pero prefiero usar un hook para hacerlo. ¿Alguna idea?
Gracias

El hook correcto para usar es admin_menu
y luego crear una función para eliminar los menús que deseas quitar. Las siguientes 2 funciones eliminan todos los menús.
add_action( 'admin_menu', 'remove_admin_menus' );
add_action( 'admin_menu', 'remove_admin_submenus' );
// Eliminar menús principales del administrador
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' );
}
// Eliminar submenús del administrador
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' );
}
Captura de pantalla del menú izquierdo usando las 2 funciones anteriores:

Siguiendo el ejemplo de /wp-admin/admin-header.php
-> /wp-admin/menu-header.php
no hay un gancho (hook) para hacerlo.
Una solución es enganchar en admin_head
y hacer algo de 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;
}
}
[actualización]
Según una aclaración a la pregunta, donde queda claro que la motivación es personalizar la marca en el área de administración, estos son los 4 plugins que uso para eso:
- Adminimize (oculta grandes partes de la interfaz de WordPress, filtrando por rol)
- Ozh' Admin Drop Down Menu (todo el menú de administración en un menú desplegable horizontal basado en CSS)
- Admin Menus Fixed (compañero perfecto para Ozh's)
- Admin Tweaks (soy el autor de este, y su propósito principal es personalizar muchas áreas de la interfaz de administración)

Si eliges este camino, tiene más sentido usar wp_enqueue_script()
con el hook admin_enqueue_script
.

@mrwweb ¿Incluso cuando es una inserción tan pequeña? ¿Crees que vale la pena?

De acuerdo. Las inserciones pequeñas de scripts/estilos se hacen más fácilmente con admin_head
.

No me gusta usar jQuery a menos que no tenga otra opción. ¿Qué pasa si los visitantes desactivan el JavaScript en su navegador? Aunque es poco probable que suceda, existe esa posibilidad. De todos modos, gracias por el consejo.

En mi ejemplo, será cuestión de eliminar doblemente también ocultando los 2 divs en CSS.

La única forma compatible con hooks que conozco es usar remove_menu_page()
para cada elemento del menú individualmente. Incluso así, no sé qué pasaría con la barra lateral izquierda en sí (si colapsaría hasta 0px de ancho o qué). Incluso usando los hooks, imagino que en algún momento querrás encolar una hoja de estilos de administración para limpiar lo que quede de los estilos del marcado del menú.
Sería cuidadoso al hacer esto. Por ejemplo, si eliminas "Ajustes", entonces cualquier plugin que cree páginas de menú en "Ajustes" no podrá ser accedido. En general, me pregunto cuán sostenible es realmente eliminar completamente el menú.

add_action( 'admin_menu', 'remove_admin_menus' );
/**
* Elimina todos los menús del área de administración de WordPress
*
* Esta función vacía completamente el array global $menu,
* lo que resulta en la eliminación de todos los menús del panel de administración
*/
function remove_admin_menus(){
global $menu;
$menu = array();
}

Esta respuesta también es muy útil. Es corta y funciona a la perfección, excepto para las páginas de menú creadas por plugins. (lo cual no debería ser un problema porque solo son visibles para un administrador)

Es una solución práctica, sin duda, PERO vale la pena mencionar que en realidad no bloqueará el acceso a esas páginas de administración, solo las hará invisibles en la barra de administración. Es mejor que una solución CSS para ocultar elementos, por supuesto, pero aún tiene fallas en términos de seguridad: usuarios expertos aún pueden acceder directamente a las páginas de administración editando la URL.

Mejoro la solución de @brasofilo ya que tiene un pequeño error: al recargar la página con una conexión a internet no óptima, el menú aparecerá por un tiempo muy breve. Para evitarlo, añadí un poco más de 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;
}
}
