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

14

Necesito personalizar el panel de administración para mi usuario. Entonces, ¿cómo elimino todo el menú de administración? No eliminar el elemento del menú, me refiero a eliminar por completo la barra de menú vertical izquierda, incluir el diseño del menú (por ejemplo, css, background..etc). Quiero que quede en blanco.

Puedo hacerlo mediante css hack. Pero prefiero usar el gancho para hacerlo. ¿Algunas ideas?

Gracias

dev-jim
fuente
Soy curioso. Si sus usuarios no necesitan acceso a ninguno de los elementos del menú de administración, ¿por qué necesitan acceso al panel de control?
moraleida
Preguntándose sobre los motivos ... ¿Desea ocultarlo para roles / usuarios específicos? ¿Estás creando un menú personalizado de la barra de administración (en la parte superior)?
brasofilo
1
Sí, me gustaría personalizar el menú de administración. No es que el menú de administración actual no sea lo suficientemente bueno, simplemente se siente como 'wordpress'. No es bueno para la marca, en mi opinión.
dev-jim
Por favor revise mi respuesta anterior aquí; wordpress.stackexchange.com/questions/136058/…
numediaweb

Respuestas:

16

El gancho correcto para usar es admin_menucrear una función para eliminar los menús que desea eliminar. Las siguientes 2 funciones eliminan todos los menús.

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

Captura de pantalla del menú izquierdo usando las 2 funciones anteriores:

ingrese la descripción de la imagen aquí

Chris_O
fuente
3
Encontré otra forma usando $GLOBALS['menu'] = array();. Dar nulo en la matriz también hará el trabajo.
dev-jim
¿Dónde pones esto?
¿Alguien notó los borradores recientes de esa captura de pantalla? ;)
acSlater
5

Siguiendo el ejemplo de /wp-admin/admin-header.php-> /wp-admin/menu-header.phpno hay gancho para hacerlo.

Una solución es conectar admin_heady 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 marcar el área de administración, estos son los 4 complementos que utilizo para eso:

brasofilo
fuente
Si sigue esta ruta, tiene más sentido usarlo wp_enqueue_script()con admin_enqueue_scriptgancho.
mrwweb
1
@mrwweb ¿Incluso cuando es una inserción tan pequeña? ¿Crees que es digno?
brasofilo
Convenido. Las inserciones pequeñas de guión / estilo se hacen más fácilmente con admin_head.
chrisguitarguy
No me gusta usar jquery a menos que no tenga otra opción. ¿Qué pasa si los visitantes deshabilitan el JavaScript en su navegador? Sin embargo, no es probable que suceda, pero existe la posibilidad allí. De todos modos, gracias por el consejo.
dev-jim
En mi ejemplo, será una cuestión de doble eliminación al ocultar también los 2 divs en CSS.
brasofilo
2

La única forma amigable con el gancho que conozco es usar remove_menu_page()para cada elemento del menú. Incluso entonces, no sé qué sucede con la barra izquierda en sí (si colapsaría hasta 0px de ancho o qué). Incluso con el uso de los ganchos, imagino que en algún momento querrás colocar una hoja de estilo de administrador para limpiar lo que queda de los estilos de marcado del menú.

Tendría cuidado al hacer esto. Por ejemplo, si elimina "Configuración", no se puede acceder a ningún complemento que cree páginas de menú en el menú "Configuración". En general, me pregunto qué tan sostenible es realmente eliminar completamente el menú.

mrwweb
fuente
Estoy seguro de que estaba buscando una forma de eliminar el menú para usuarios habituales, no para administradores. :)
Christine Cooper
1
add_action( 'admin_menu', 'remove_admin_menus' );

function remove_admin_menus(){
    global $menu;
    $menu = array();
}
kakoma
fuente
Esta respuesta también es muy útil. Es breve y funciona a las mil maravillas, a excepción de las páginas de menú creadas por complementos. (que no debería ser un problema porque solo son visibles para un administrador)
Charles
Es una solución práctica, de hecho, PERO vale la pena decir 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: los usuarios inteligentes aún pueden obtener acceso directo a las páginas de administrador editando la URL.
Marcos Buarque
0

Mejoro la solución de @brasofilo, ya que tiene un pequeño error: la recarga de la página con el mejor menú de conexión a Internet aparecerá por muy poco tiempo. Para evitarlo agregué 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;

    }
}
romapad
fuente