11ene
12

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.

Para saber más:

  • Pingback: Bitacoras.com

  • http://www.illi-pro.com Illi.Pro

    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

  • calisoft

    Por lo menos deben citar la fuente no?

    • http://www.illi-pro.com Illi.Pro

      Fernando la cita al principio de la entrada cuando dice “eliminar acceso a los menús de administración” fíjate bien y deja de crear problemas donde no los hay.

    • http://fernandotellado.com/ Fernando Tellado

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

  • http://www.controldeasistencias.com.mx Rafael

    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 ?

  • http://dragondeluz.com dragondeluz

    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ó)

  • http://gerar2k.com.ar Gerar2k

    Como se puede hacer para los que tienen cuenta de Suscriptor?

  • Pingback: Quitar elementos Panel de Wordpress

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

  • Jack Bauer

    ¿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']);

  • http://www.elsitiodesantarosa.com Omar

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