Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/04/2011, 13:31
Avatar de metacortex
metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 11 meses
Puntos: 832
[Mini-tutorial] Ocultar menús laterales en el panel de administración de WordPress

Desaparecer menús en WordPress es muy fácil. Pega este código en el archivo functions.php de tu plantilla y mira el resultado:

Código php:
Ver original
  1. add_action('admin_menu' , 'adios_entradas');
  2.  
  3. function adios_entradas() {
  4.     global $menu;
  5.     unset($menu[5]);
  6. }
¡Felicitaciones! acabas de volar el menú Entradas en tu panel de administración. Ahora vamos con la parte teórica:

En el núcleo de WordPress se asigna posiciones predeterminadas para los menús nativos de la administración. Dichas posiciones son:

Código PHP:
5   -  Entradas
10  
-  Multimedia
15  
-  Enlaces
20  
-  Páginas
25  
-  Comentarios
60  
-  Primer separador
65  
-  Plugins
70  
-  Usuarios
75  
-  Herramientas
80  
-  Ajustes
100 
-  Segundo separador 
Creo que se capta. Cuando escribimos $menu[5] estaremos invocando al menú Entradas, lo mismo que $menu[25] correspondería a Comentarios. Veamos cómo sería el asunto con varios menús. A continuación le daremos palo a los menús de Entradas, Multimedia y Usuarios mediante un array simple y un bucle:

Código php:
Ver original
  1. function adios_menus() {
  2.     global $menu;
  3.     $menus = array(5 , 10 , 70);
  4.     foreach($menus as $m)
  5.         unset($menu[$m]);
  6. }

¿Aún quieres más? Vamos con algo un poquito más complicado. Ocultaremos estos mismos menús sólo a los usuarios con rol de Autor:

Código php:
Ver original
  1. function adios_menus() {
  2.     global $menu, $current_user, $wpdb;
  3.     get_currentuserinfo();
  4.     if($current_user->wp_capabilities['author']) { // Leer Nota 2
  5.         $menus = array(5 , 10 , 70);
  6.         foreach($menus as $m)
  7.             unset($menu[$m]);
  8.     }
  9. }

Nota: Este procedimiento sólo oculta los menús. Las funciones siguen manteniéndose accesibles. Si deseas suprimir el acceso totalmente, te recomiendo crear nuevos roles y configurarlos a conveniencia. Para gestionar bien esta part te recomiendo el plugin User Role Editor.

Nota 2: Si es el caso, sustituye "wp_capabilities" por [prefijo]_capabilities.


Submenús

Eliminarlos

Vamos a eliminar el submenú "Añadir nueva entrada":

Código PHP:
Ver original
  1. add_action('admin_menu' , 'adios_submenu');
  2.  
  3. function adios_submenu() {
  4.     global $submenu;
  5.     unset($submenu['edit.php'][10]);
  6. }

La explicación: WordPress establece los incrementos son de 5 en 5, donde [0] es el título del menú padre. Es natural esperar que el sistema reserva de manera estática los primeros puestos para los submenús nativos (lo que no impide que sobrescribas lo que sea). El resto se maneja con un bucle en incrementos de 5.

En este punto, el archivo /wp-admin/menu.php resulta una excelente referencia porque puedes identificar fácilmente las variables correspondientes. Por ejemplo, los submenús de "Páginas" están expresados así:

Código PHP:
Ver original
  1. $submenu['edit.php?post_type=page']['numero de posición'];


Agregarlos:

Asignemos un submenú extra al menú "Entradas":

Código PHP:
Ver original
  1. add_action('admin_menu' , 'agregar_submenu');
  2.  
  3. function agregar_submenu() {
  4.     global $submenu;
  5.     $submenu['edit.php'][6] = array( 'Cualquier cosa' , 'cualquier_cosa' , 'cosa.php' );
  6. }

Listo. El parámetro es simple de configurar:

Código PHP:
Ver original
  1. array( 'Nombre del submenú' , 'identificador' , 'ruta-al/archivo.php' );

Probando todo esto noté que al agregar submenús, el sistema ignora los parámetros de prioridad de add_action() y de todas formas lo ubica de último en la lista.


De interés:

- Lista de roles y niveles de acceso: http://codex.wordpress.org/Roles_and_Capabilities

- Estructura de base de datos para _users y _usermeta: http://codex.wordpress.org/Database_...e:_wp_usermeta

Última edición por metacortex; 03/06/2011 a las 13:37 Razón: Añadir info