Cómo crear un plugin para WordPress con página de opciones

WordPress es un sistema de gestión de contenidos (CMS) que facilita la creación y mantenimiento de un blog  u otros tipos de páginas web. Se trata de una herramienta muy potente y adaptable.

Una de las claves del éxito de WordPress es que está orientado a usuarios, no sólo a desarrolladores. Cualquier usuario puede aprender a usarlo sin saber absolutamente nada de programación. Sin embargo, esto no quiere decir que se hayan olvidado de los desarrolladores, ya que posee una estructura bien definida y organizada.

La programación mediante Hooks y funciones ofrece mucha flexibilidad y escalabilidad. En otras palabras, su curva de aprendizaje es la que menos esfuerzo requiere por parte del usuario.

Otra de las claves de su rápido crecimiento es la gran comunidad de desarrolladores y diseñadores encargados de mejorar su núcleo y añadir plugins y temas para la comunidad.

En este post voy a intentar explicar cómo crear un plugin sencillo de WordPress que tenga opciones de configuración en el menú de Administrador.

¿Qué es un plugin?

Un plugin es un complemento que modifica o altera el flujo del CMS para añadir funcionalidades de cualquier tipo.

La estructura de este sistema permite añadir funciones propias durante la ejecución de muchos eventos. Es decir, WordPress nos ofrece una plataforma en la que podemos añadir nuestras propias funciones para añadir o modificar la funcionalidad propia del mismo en un punto de ejecución.

Las funciones que permiten a los plugins añadir o modificar el comportamiento del core de WordPress son las denominadas hooks. Existen 2 tipos:

1. Hooks de acción

Aplica una acción en un punto específico de ejecución, generalmente están definidos cuando ocurren eventos relevantes en el flujo. Por ejemplo, al cargar la cabecera o el pie de la página, tras publicar o acceder a un post, etc.

add_action( $hook, $function_to_add, $priority, $accepted_args )

Donde:

$hook: punto de ejecución dónde ejecutar la función. Puedes consultar la lista de hooks aquí.

$function_to_add: función que queremos añadir.

$priority: entero opcional que define la prioridad en la que se ejecutará nuestra función. Números pequeños se ejecutarán antes. Por defecto  su valor es 10.

$accepted_args: entero opcional con el número de argumentos que acepta la función. Por defecto 1.

2. Hooks de filtro

Se trata de un caso específico de hook de acción. Se aplica para modificar diferentes tipos de datos como, por ejemplo, parámetros de funciones, textos antes de guardarse en base de datos o mostrarse al usuario, etc.

add_filter($tag, $function_to_add, $priority, $accepted_args )

Donde:

$tag: nombre del filtro existente. Puedes consultar la lista de filtros aquí.

$function_to_add: función que se ejecutará cuando el filtro sea aplicado.

$priority: entero opcional que define la prioridad en la que se ejecutará nuestra función. Números pequeños se ejecutarán antes. Por defecto  su valor es 10.

$accepted_args: entero opcional con el número de argumentos que acepta la función. Por defecto 1.

Creando un plugin con página de opciones

Antes de crear un plugin en wordpress debemos saber que estos componentes se alojan en el directorio wp-content/plugins/ de nuestra instalación. Por tanto, el primer paso es crear una carpeta con el nombre del plugin y dentro un archivo PHP con el mismo nombre dónde escribiremos el código.

En nuestro caso vamos a crear un plugin que aplique un filtro al contenido de un post para mostrarlo en pantalla con una longitud máxima configurable por el administrador. Lo vamos a denominar “max_length_content”, luego su estructura sería la siguiente:

max_length_content

Para evitar problemas tenemos que seguir unas pautas cuando asignamos nombres a las carpetas, archivos y funciones. Entre ellas podemos destacar las siguientes:

  1. El nombre del plugin debe ser único y, en la medida de lo posible, describir lo que hace. Puedes consultar el repositorio oficial aquí.
  2. El archivo PHP debe llamarse igual que el plugin, de manera que no encontremos dos plugins con el mismo nombre de archivo PHP.
  3. Añadir prefijos a las funciones para que no haya conflictos con las de otros plugins.

Una vez creada la estructura podemos empezar a programar nuestro plugin en el archivo PHP.

Agregamos la cabecera

Agregamos la cabecera

Ésta es la información que se muestra en el menú del administrador. El único campo obligatorio es el nombre, aunque es conveniente añadir todos aquellos que puedan dar información útil al administrador.

Información en el Menú del administrador

Añadimos la entrada de menú en el panel de administración

Añadir la entrada de menú en el panel de administración

La acción admin_menu se ejecuta después de colocar el menú básico del administrador. Por tanto, al añadir nuestra función conasa_plugin_menu en éste punto de ejecución, podemos insertar nuestra página de configuración para el plugin.

La función add_menu_page  añade una nueva entrada en el menú. Para ello, espera como parámetros el título de la página, título del menú, rol que tiene acceso, identificador único de la página, función encargada de pintar el código del formulario (descrito en el siguiente apartado) y el icono en el panel.

Nueva entrada en el menú

¡Ojo! Las opciones de menú del plugin sólo se muestran cuando está activado.

Agregamos la función que dibuja el formulario con las opciones de configuración

Agregar la función que dibuja el formulario con las opciones de configuración

La función conasa_max_length_content_page_settings contiene el código html con el formulario de opciones.

Lo que hay que tener en cuenta aquí es que, después de la etiqueta form, debemos incluir dos funciones que dejarán preparado el formulario para almacenar la información. Las funciones son settings_fields y do_settings_sections, que reciben como parámetro el nombre del grupo de opciones. El grupo es un valor de texto cualquiera definido por el programador.

Como podemos observar nuestro formulario sólo tiene un campo de texto con el id conasa_max_length_value, dónde introduciremos la longitud del contenido del post que queremos mostrar.

Registrar los ajustes del plugin

Registrar los ajustes del plugin

Una vez definidas las opciones de configuración, debemos registrar los ajustes del plugin mediante la función register_setting, para que puedan ser almacenados en base de datos.

register_setting( $option_group, $option_name, $sanitize_callback )

Siendo:

$option_group: El grupo al que pertenece la opción (definido en el punto anterior)

$option_name: El nombre del campo de opción.

$sanitize_callback: Parámetro opcional que define la función para sanitizar el valor del campo.

Agregamos nuestra función conasa_max_length_content_setting en el hook admin_init, que se ejecuta cuando el usuario accede al área de administración.

Llegados a este punto, podemos observar nuestra pantalla de configuración del plugin.

Pantalla de configuración del plugin

Función principal del plugin

Función principal del plugin

El hook the_content se aplica al recibir el contenido de un post desde la base de datos y antes de mostrarlo por pantalla. Por tanto, si añadimos la función conasa_max_length_action a este filtro podemos alterar el contenido del mismo.

Tras comprobar que el contenido recibido es de un post y el punto de ejecución no sea el de visualización individual, lo cortamos a la longitud definida en la página de configuración.

Recuperar el valor de una opción es tan sencillo como llamar a la función get_option con el nombre de dicho campo (conasa_max_length_value).

Después de cortar el contenido, lo retornamos al módulo que lo ha invocado para que continúe con su flujo y finalmente lo muestre por pantalla.

Resultado

En nuestro caso, después de activar el plugin y configurar la longitud máxima a 100, podemos observar el contenido de los posts limitados a 100 caracteres.

Resultado

 

Código PHP

 

Configuración plugin Max Length Content

 

 

 

Enlaces interesantes

The following two tabs change content below.

Fausto López

Soy una persona alegre, positiva, en formación continua, responsable e implicado en todo lo que hago. En lo personal soy muy familiar, me encanta bailar, ir al cine y viajar.
Compartir: