Llegados a este punto, he creído conveniente hacer una parada técnica, para empezar mi nuevo plugin, y así revisar los temas que hasta aquí hemos tratado.
El directorio del plugin
Como se explica en el artículo ‘2. Conceptos básicos de los plugins’, empezamos creando el directorio que va a acoger nuestro plugin.
En este caso lo he denominado ‘stm-ancora’ para potenciar mi ego. Dentro de este directorio, creamos un archivo con el mismo nombre, stm-ancora.php, que será el archivo principal de nuestro plugin.
En ese archivo introducimos lo siguiente:
1 2 3 4 5 |
<?php /* Plugin Name: Ancora Theme */ ?> |
Con esto, WordPress ya nos reconoce la existencia del plugin:
Sin embargo, esto es muy pobre, y vamos a ofrecer más información al usuario:
1 2 3 4 5 6 7 8 9 10 |
<?php /* Plugin Name: Ancora Theme Plugin URI: sergiotoca.com Description: Este plugin cumple un doble objetivo. Por un lado, me sirve de aprendizaje. Por otro, lo desarrollo para crear mi nuevo tema WP Version: 1.0 Author: Sergio TOCA MORENO Author URI: sergiotoca.com */ ?> |
Parece que queda algo mejor:
Añadir elemento de menú
Como ejemplo de nuestro artículo ‘5. Menús de administración’, vamos ahora a crear un elemento nuevo del menú:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
function stm_ancora_menu() { add_menu_page( 'ANCORA', 'ANCORA', 'publish_pages', 'stm-ancora', 'stm_prueba_funcion_menu', '', '' ); } add_action( 'admin_menu', 'stm_ancora_menu' ); function stm_prueba_funcion_menu() { ?> <div class="wrap"> <h2>Tema ANCORA</h2> <p>Prueba de creación de menú con función</p> </div> <?php } |
El resultado, al activar nuestro plugin, es el siguiente:
Bien, no está mal. Pero su posición en el menú no me gusta. Para ello, vamos a cambiarla, colocando un 3 en el último parámetro de la función add_menu_page:
1 |
add_menu_page( 'ANCORA', 'ANCORA', 'publish_pages', 'stm-ancora', 'stm_prueba_funcion_menu', '', '3' ); |
Y el resultado es:
Menú con llamada a fichero
Ahora, en lugar de añadir el menú mediante una función, vamos a ver cómo hacerlo mediante un fichero adicional (ya sabéis, me gusta la programación por módulos).
Para ello, cambiamos los parámetros de la función add_menu_page otra vez:
1 |
add_menu_page( 'ANCORA', 'ANCORA', 'publish_pages', 'stm-ancora/prueba-funcion-menu.php', '', '', '3' ); |
Y, en el directorio de nuestro plugin, ‘stm-ancora’, creamos el fichero prueba-funcion-menu.php, con el siguiente contenido:
1 2 3 4 |
<div class="wrap"> <h2>Tema ANCORA</h2> <p>Prueba de creación de menú con fichero</p> </div> |
Con lo que conseguimos el mismo resultado.
Este plugin lo quiero instalar de tal forma, que lo pueda manipular el usuario de la web, que tendrá categoría de editor, por lo que vamos a entrar como tal, a ver si está disponible. El resultado es el siguiente:
Roles y permisos (capabilities)
Yo estoy preparando este plugin para que un usuario con categoría editor lo pueda emplear, pero sin poder acceder al menú ‘Apariencia’ de la administración de WordPress (hay mucho manazas suelto).
Si vamos a la página del Codex de WordPress Roles and Capabilities, encontraréis a media altura de la página una tabla con los diferentes permisos que tiene cada rol de usuario. Bien, como yo quiero que mi usuario entre como ‘Editor’, busco los diferentes permisos que le corresponden al editor en la tabla y cojo uno de ellos, ‘publish_pages’, para asignárselo al plugin y así el editor lo pueda manipular a su antojo.
Posición en el menú del panel de administración de WP
Para entender cómo manejar la posición de los elementos en el menú izquierdo del panel de administración de WordPress, en la página del Codex add_menu_page, abajo, justo antes de los comentarios, encontraréis la tabla de las posiciones de los elementos por defecto de WordPress:
Menu Structure
Default: bottom of menu structure
- 2 – Dashboard
- 4 – Separator
- 5 – Posts
- 10 – Media
- 15 – Links
- 20 – Pages
- 25 – Comments
- 59 – Separator
- 60 – Appearance
- 65 – Plugins
- 70 – Users
- 75 – Tools
- 80 – Settings
- 99 – Separator
La misma página nos advierte del peligro que supone que dos elementos del menú tengan el mismo parámetro de posición, pues en tal caso uno de ellos no se visualizará. Para reducir este riesgo, en lugar de un parámetro entero (‘3’) lo más correcto sería ponerlo en decimal (p.ej., ‘3.3’).
El último truco
Esto que voy a explicar a continuación, más que un truco, personalmente, me parece un bugg.
El mismo Codex te explica los parámetros que debes aportar a la función add_menu_page:
1 2 3 4 5 6 7 8 9 |
add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position ); |
Bien, esto es cuando lo que hacemos es añadir una nueva página de menú mediante una función. Sin embargo, si lo queremos hacer mediante un archivo, la ruta y el nombre del archivo lo debemos introducir en $menu_slug, y dejar $function = ».
Añadiendo submenús
Para añadir elementos de submenú, emplearemos la función add_submenu_page:
1 2 3 4 5 6 7 8 |
add_submenu_page( $parent_slug, $sub_page_title, $sub_menu_title, $capability, $sub_menu_slug, $function ); |
Aquí debemos tener en cuenta también el truco de los argumentos $sub_menu_slug y $function, con los que tenemos que jugar, en función de si queremos construir la sub-página con una función o con un fichero, como se ve a continuación:
1 2 3 |
add_menu_page( 'ANCORA', 'ANCORA', 'publish_pages', 'stm-ancora/prueba-funcion-menu.php', '', '', '3' ); add_submenu_page( 'stm-ancora/prueba-funcion-menu.php', 'Pagina principal', 'Pagina principal', 'publish_pages', 'stm_ancora_principal', 'stm_prueba_funcion_menu' ); add_submenu_page( 'stm-ancora/prueba-funcion-menu.php', 'Pagina secundaria', 'Pagina secundaria', 'publish_pages', 'stm-ancora/prueba-funcion-menu.php', '' ); |
Al tener submenús, WordPress genera automáticamente otro elemento de submenú igual al menú, lo cual es práctica común eliminarlo, con la instrucción remove_submenu_page( $menu_slug, $submenu_slug ), como he hecho yo también:
1 |
remove_submenu_page( 'stm-ancora/prueba-funcion-menu.php', 'stm-ancora/prueba-funcion-menu.php' ); |
Así pues, hemos visto cómo empezar a crear un plugin y cómo modificar el menú de administración de WordPress, añadiéndole elementos. Ahora seguiremos la traducción del ‘Manual de Plugins de WordPress’, y cuando considere conveniente haremos otra parada técnica.