Creación de subpáginas en el backend WordPress

El método que hemos empleado hasta ahora para visualizar los resultados de nuestro plugin resulta muy torticero. Por eso, en este artículo vamos a implementar una subpágina del menú ‘Medios’ en el backend WordPress.

Desarrollo de la idea

El método que habíamos empleado hasta ahora para mostrar los resultados de nuestro plugin era bastante ‘torticero’. Además, este es un plugin exclusivo de la administración del backend WordPress, sin resultados en el frontend. Por lo tanto, es lógico que lo ubiquemos ya en su entorno natural.

Luego ya veremos cómo visualizaremos los diferentes tipos de datos que nos mostrará el plugin. He pensado en utilizar un sistema de pestañas superiores para poder movernos entre los attachments y el sistema de directorios. Obviamente, si alguien tiene alguna idea al respecto, es muy libre de opinar.

 

Codificación para crear una subpágina en el backend WordPress

La creación de páginas y subpáginas en el backend WordPress, es posiblemente uno de los aspectos más difíciles de la programación en WordPress. Por eso, prometo crear una serie de artículos dedicada a la programación del backend WordPress.

Sin embargo, en el caso que nos incumbe ahora, resulta bastante sencillo. Sólo tenemos que emplear la instrucción add_submenu_page().

 

¿Cómo implementamos la función add_submenu_page?

Como podéis ver en el enlace superior al Codex de WordPress, esta función utiliza los siguientes argumentos:

  • Slug del elemento padre
  • Texto a mostrar en las etiquetas del título de la página
  • Texto a utilizar en el menú
  • Nivel de permisos del usuario que puede utilizar la opción
  • Slug de la subpágina que creamos
  • Función callback que genera la subpágina

Además, esta función se tiene que ejecutar mediante el action hook ‘admin_menu’. Por tanto, el resultado será el siguiente:

Sólo me faltan dos incisos, sobre la codificación.

En primer lugar,  tendremos que extraer de la función stmpujante_funcion_crear_pagina() las funciones listar_directorios_ruta()stmpujante_formatos_imagenes(). Las colocaremos antes del gancho.

Finalmente, indico aquí la lista de posibles valores del primer atributo de la función add_submenu_page():

  • ‘index.php’ para el Escritorio.
  • ‘edit.php’ para Entradas
  • ‘upload.php’ para Medios
  • ‘edit.php?post_type=page’ para Páginas
  • ‘edit-comments.php’ para Comentarios
  • ‘edit.php?post_type=tu_custom_post_type’ para los Custom Post Type
  • ‘themes.php’ para Apariencia
  • ‘plugins.php’ para Plugins
  • ‘users.php’ para Usuarios
  • ‘tools.php’ para Herramientas
  • ‘options-general.php’ para Ajustes
  • ‘settings.php’ para Ajustes en multisite.

 

Fichero de ejemplo

Como cada semana, el fichero de ejemplo del artículo lo encontraréis en el grupo de Facebook ‘WordPress en Español‘ y en mi cuenta de GitHub.

Una vez lo activéis, os aparecerá la nueva opción del submenú dentro del menú Medios:

Nuevo submenú del backend WordPress
Nuevo submenú del backend WordPress

Cuando entremos en el submenú ‘STMPujante’, la pestaña del navegador nos mostrará el texto introducido en el segundo parámetro de la función add_submenu_page().

Finalmente, lo que veremos en la subpágina del backend WordPress es lo mismo que teníamos en el anterior ejemplo:

 

Conclusiones y próximo artículo

En resumen, hemos volcado los datos de los attachments y los archivos del directorio ‘uploads’ en el backend WordPress. Además, ahora vamos a incorporar también las taxonomías que nos permitirán emular el pseudo-sistema operativo.

Mientras vamos pensando cómo hacerlo, el próximo artículo girará en torno al webinar que di el pasado jueves, 23 de febrero, que se basaba precisamente en la creación de un plugin.

 

Contributors

Siguen apareciendo los mismos nombres en la lista de contributors del plugin:

miguelthepooh, sergiotoca

 

Preguntas, retos y previos

Como dije en el anterior artículo de la serie, empezamos a tener muchos datos sobre los attachments, los archivos del directorio ‘uploads’, y a todo esto, ahora se van a incorporar las taxonomías-carpetas. Así  que podéis hacer todo tipo de comentarios, sugerencias e ideas sobre las operaciones a realizar con todos ellos.

 

Hasta la próxima semana.

2 opiniones en “Creación de subpáginas en el backend WordPress”

  1. Hola buenos días Sergio, muy bueno tu tutorial, muchas gracias por tu tiempo y dedicación al crearlo, me ha sido muy util, quería hacerte 2 preguntas a ver si me puedes ayudar:

    Estoy creando un plugin propio y entre todas la funciones que tiene mi plugin una es agregar al menu principal un nuevo item con un sub menu a 3 paginas, por ejemplo si mi menu principal contiene los item

    | Inicio | Quienes Somos | Blog | Contactos |

    Al activar mi plugin se agrega un item nuevo con 3 opciones y el nuevo menu queda:

    | Inicio | Quienes Somos | Blog | Contactos | Item_Nuevo |

    -> Opcion 1 (Dentro de Item_Nuevo)

    -> Opcion 2 (Dentro de Item_Nuevo)

    -> Opcion 3 (Dentro de Item_Nuevo)

    Pue bien hasta aca todo lo puedo hacer perfecto, ahora bien ya que la funcion de cada una de las opciones 1, 2 y 3 estan definidas, quisiera crear dichas paginas automaticamente al activar o instalar el plugin de manera que el usuario no tenga que hacerlo manualmente y crear una a una los 3 nuevos enlaces.

    Mi primera pregunta es existe algun hook o algun mecanimo que me cree dichas paginas directamente desde mi plugin, algo asi como MI_HOOK($LINK_NUEVO, $TITLE, $CONTENT) , o como pudiese hacerlo, supongo que si debe de existir por que e visto plugins que agregan paginas propias al instalarse pero no consigo la documentación necasaria para hacerlo.

    Pregunta 2

    Una parte importante de mi plugin es agregar una tabla nueva a la base de datos de wordpres y de hecho asi lo hace, por lo que le he agregado a mi plugin la funcionalidad de que al desactivarse el plugin dicha tabla se elimine de manera que pueda quedar lo mas limpio posible el wp del usuario, pero esto lo esta realizando automaticamente al desactivarse, lo que quiere decir que si por error el usuario desactiva el plugin perdera toda la informacion de la tabla, mi pregunta es como pudiese enviarle al usuario un alert o un mensaje donde se le pregunte al usuario si desea eliminar la tabla o no?

    De ante mano nuevamente muchisimas gracias por tu tiempo y dedicación, un saludo y que pases un buen día.

  2. Buenos días, Juan Carlos.

    Ante todo, gracias por tus comentarios, ya que por fin los recibo de alguien que también ‘pelea’ con código WordPress.

    Sobre la primera pregunta que me formulas, mírate la función wp_insert_post(). En el array que le pases, especifica el parámetro ‘post_type’ => ‘page’, y no le indiques el parámetro ‘ID’ para que te cree uno nuevo.

    Dicha función te devolverá el ID del nuevo post creado, y a partir de ahí ya puedes trabajar con la nueva página creada.

    No olvides que previamente debes realizar una búsqueda para comprobar que las páginas no hayan sido creadas anteriormente.

    En cuanto a la segunda, he encontrado la función register_deactivation_hook( $file, $function ), que te permite llamar a una $function cuando se desactiva el plugin $file.

    Espero haberte ayudado con las respuestas. Ante cualquier otra pregunta, no dudes. Aquí me tendrás.

    Un abrazo,

    Sergio.

Deja un comentario

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