¿Cómo eliminar todo el menú de administración?

14 may 2012, 20:38:07
Vistas: 20.9K
Votos: 14

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

4
Comentarios

Tengo curiosidad. Si tus usuarios no necesitan acceso a ninguno de los elementos del menú de administración, ¿por qué necesitan acceder al panel de control en absoluto?

moraleida moraleida
15 may 2012 04:35:02

Me pregunto sobre los motivos... ¿Quieres ocultarlo para roles/usuarios específicos? ¿Estás creando un menú personalizado en la Barra de Administración (en la parte superior)?

brasofilo brasofilo
15 may 2012 04:49:53

Sí, me gustaría personalizar el menú de administración. No es que el menú actual no sea lo suficientemente bueno, simplemente tiene un aspecto demasiado 'wordpress'. No es bueno para la marca, en mi opinión.

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

Por favor, revisa mi respuesta anterior aquí; http://wordpress.stackexchange.com/questions/136058/how-to-remove-admin-menu-pages-inserted-by-plugins/160523#160523

numediaweb numediaweb
7 sept 2014 18:46:32
Todas las respuestas a la pregunta 5
2
16

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:

Menú de administración de WordPress después de eliminar elementos

15 may 2012 06:09:22
Comentarios

Encontré otra forma usando $GLOBALS['menu'] = array();. Pasar null en el array también funciona.

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

¿Dónde colocas esto?

User User
17 jul 2013 17:22:50
6

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)
15 may 2012 04:42:04
Comentarios

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

mrwweb mrwweb
15 may 2012 04:55:30

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

brasofilo brasofilo
15 may 2012 05:01:37

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

chrisguitarguy chrisguitarguy
15 may 2012 06:18:32

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.

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

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

brasofilo brasofilo
15 may 2012 15:06:13

Esto es encantador. Solo para completar, debemos eliminar el margen agregado a la izquierda cuando el tamaño de pantalla es más pequeño. Así que en la parte CSS, solo agrega: .auto-fold #wpcontent, .auto-fold #wpfooter {margin-left: 0;}

Christine Cooper Christine Cooper
5 may 2015 18:40:10
Mostrar los 1 comentarios restantes
1

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

14 may 2012 21:40:48
Comentarios

Estoy seguro de que estaba buscando una forma de eliminar el menú para usuarios regulares, no para administradores. :)

Christine Cooper Christine Cooper
18 mar 2015 17:56:44
2
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();
}
16 abr 2016 07:13:21
Comentarios

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)

Charles Charles
26 abr 2018 16:39:33

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.

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

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;

    }
}
30 may 2016 22:29:02