Quitando menús del escritorio de WordPress

Si gestionas sitios de clientes y quieres eliminar acceso a los menús de administración, aunque el usuario sea administrador, puedes hacerlo de un modo muy sencillo y, lo más importante, sin tocar los archivos ‘core‘ de WordPress, con lo que no tendrás que rehacer las modificaciones tras una actualización.

Como ya estarás imaginando, echaremos mano del fichero functions.php de tu tema activo – y si no existe lo creas ahora mismo – y le añadiremos este código:

//quitar menus de admin
function quitar_menus () {
global $menu;
		$restricted = array( __('Posts'), __('Media'), __('Links'), __('Pages'), __('Appearance'), __('Tools'), __('Users'), __('Settings'), __('Comments'), __('Plugins'));
		end ($menu);
		while (prev($menu)){
			$value = explode(' ',$menu[key($menu)][0]);
			if(in_array($value[0] != NULL?$value[0]:"" , $restricted)){unset($menu[key($menu)]);}
		}
}
add_action('admin_menu', 'quitar_menus');

¿Que consigues con esto?, pues que solo se vean los menús personalizados – normalmente los que añaden los plugins – y aquellos que elimines de la lista de $restricted. En el ejemplo anterior solo verías el escritorio y aquellos menús de los plugins que tengas activos y a los que, por tu perfil de usuario, tengas acceso, justo lo que ves arriba en la captura.

Si también quieres quitar acceso al escritorio solo tendrías que añadir a la ista __('Dashboard'),.

Ahora bien, un usuario avezado aún podrá acceder a las distintas secciones tecleando la URL, o sea, que aunque quites el menú, si alguien teclea http://tudominio.com/wp-admin/plugins.php tendrá acceso. Si quieres eliminar también esa posibilidad, para los menús que definas, entonces el código se debe complicar un poco más, algo así:

function quitar_menus () {
global $menu, $submenu, $user_ID;
	$the_user = new WP_User($user_ID);
	$valid_page = "admin.php?page=contact-form-7/admin/admin.php";
	$restricted = array('edit.php','categories.php','upload.php','link-manager.php','edit-pages.php','edit-comments.php', 'themes.php', 'plugins.php', 'users.php', 'profile.php', 'tools.php', 'options-general.php');
	$restricted_str = 'widgets.php';
	end ($menu);
	while (prev($menu)){
		$menu_item = $menu[key($menu)];
		$restricted_str .= '|'.$menu_item[2];
		if(in_array($menu_item[2] , $restricted)){
			$submenu_item = $submenu[$menu_item[2]];
			if($submenu_item != NULL){
				$tmp = $submenu_item;
				$max = array_pop(array_keys($tmp));
				for($i = $max; $i > 0;$i-=5){

					 if($submenu_item[$i] != NULL){
						$restricted_str .= '|'.$submenu[$menu_item[2]][$i][2];
						unset($submenu[$menu_item[2]][$i]);
					}
				}
			}
			unset($menu[key($menu)]);
		}
	}
	$result = preg_match('/(.*?)\/wp-admin\/?('.$restricted_str.')??(('.$restricted_str.'){1})(.*?)/',$_SERVER['REQUEST_URI']);
	if ($result != 0 && $result != FALSE){
		wp_redirect(get_option('siteurl') . '/wp-admin/' . $valid_page);
		exit(0);
	}
}
add_action('admin_menu', 'quitar_menus');

Con este código eliminas la visualización y el acceso a los menús. Y en la lista de $restricted puedes añadir o quitar a voluntad los menús a los que se tendrá acceso.

VALORA Y COMPARTE ESTE ARTÍCULO PARA MEJORAR LA CALIDAD DEL BLOG…
(2 votos, promedio: 5)

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

AVISO: Esta publicación es de hace 3 años o más. Si es un código o un plugin podría no funcionar en las últimas versiones de WordPress, y si es una noticia podría estar ya obsoleta. Luego no digas que no te hemos avisado.

19 comentarios en “Quitando menús del escritorio de WordPress”

  1. Pingback: Bitacoras.com

  2. Fernando y si quiero hacer esto pero solo para los que tienen cuenta de Suscriptor? en este caso me interesa borrar el "Escritorio" para todos los suscritores

    1. Está citada, como siempre que la hay, y es el caso. Ya he dicho por activa y pasiva que suelo enlazar en contexto, ofreciendo incluso anchor text a la fuente. No me seas tiquismiquis y fíjate hombre, por favor 😉

  3. Fernando, pero este codigo limita el acceso a todos los usuarios ? o como regreso a ver nuevamente todas las opciones del panel de administracion con el usuario ADMIN ?

  4. esto esta bastante bien ¿pero en vez de ponerlo en la plantilla en el archivo functions.php lo podriamos poner en un plugin para ser mas práctico?

    Por otro lado ya que estamos con el tema, alguien tiene alguna idea de como hacer para que el plugin Google Analitycator muestre las estdisticas de visita a todos los usuarios y no solo al administrador? (ya probé con role manager/scooper y no sirvió)

  5. Pingback: Quitar elementos Panel de Wordpress

  6. Pingback: wp-popular.com » Blog Archive » Quitando menús del escritorio de WordPress | Ayuda WordPress

  7. ¿en qué parte de ese archivo se agrega el código? No me ha funcionado, me manda errores:

    Warning: preg_match() [function.preg-match]: Unknown modifier 'o' in…

    se refiere a la línea:

    $result = preg_match('/(.*?)/wp-admin/?('.$restricted_str.')??(('.$restricted_str.'){1})(.*?)/',$_SERVER['REQUEST_URI']);

  8. Excelente tutorial, me ha servido mucho ahora que estoy empezando a utilizar WordPress como Gestor de Contenidos para mis clientes.

  9. Buenas,

    Muy interesante el artículo.

    Me gustaría saber si hay algún plugin u opción para aplicar esta idea según usuario, y según nombre de usuario, ya que cuando un wordpress lo utiliza mucha gente, sería muy interesante esta opción.

    Muchas gracias.

  10. Kaled Kelevra

    Para los que quieren/les interesa hacerlo sólo para un usuario concreto (o para el resto de usuarios, depende del caso), acá dejo cómo lo hice yo:

    // Función para eliminar menús del menú lateral izquierdo del panel de administración o dashboard (a todos los usuarios menos al administrador)

    function remove_menus () {

    global $menu;

    $restricted = array(__(‘Appearance’), __(‘Plugins’), __(‘Shareaholic’));

    end ($menu);

    while (prev($menu)){

    $value = explode(‘ ‘,$menu[key($menu)][0]);

    if(in_array($value[0] != NULL?$value[0]:»» , $restricted)) {

    unset($menu[key($menu)]);

    }

    }

    }

    if ($current_user->ID != 1) {

    add_action(‘admin_menu’, ‘remove_menus’);

    }

    Es decir, tan sólo deben añadir un comprobación (un «if») al final, cuando vayan a aplicar los cambios al menú de admin.

    Yo en mi caso lo hice mediante el ID de usuario, ya que sé que el único usuario que no quiero que se le oculten los menús sea el de ID=1, pero pueden modificarlo a su gusto y necesidad. 😉

  11. Kaled Kelevra

    Por cierto, lo que no sé (y aún sigo buscando) es la manera de hacerlo también para cualquier otro menú que nos creen los plugins, como el de «Sexy Bookmarks», el cual ya intenté eliminar probando a escribir «Shareaholic», «Sexy-Bookmarks», «SexyBookmarks»…, pero nada, no hay manera de que desaparezca.
    Si alguien sabe algo sería de agradecer. 🙂

  12. Hola… quisiera eliminar el menú setting pero el que está adentro del menú woocommerce, es decir, que se vea el menú woocommerce pero no el setting que está dentro de él…es posible?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

Ir arriba Ir al contenido