2. Conceptos básicos de los plugins

Empezando

Simplemente, un plugin WordPress es un fichero PHP con un comentario de cabecera de plugin. Este fichero será el fichero ‘subdirectorio-plugin/tu-fichero-plugin.php’. Sólo un fichero en el subdirectorio del plugin puede tener la sección de cabecera.

Ve al directorio wp-contentplugins y crea el subdirectorio mi-plugin. Entra en él, y crea el archivo mi-plugin.php.

Una vez creado, edítalo con un editor de textos plano, introduciendo estas primeras líneas:

Ahora, puedes entrar en la administración de tu WordPress, y verás, en el apartado de Plugins, tu nuevo plugin.

Puede ser que el plugin lo creas sólo para tu sitio. Pero también es posible que lo quieras compartir con el resto de la comunidad WordPress. En tal caso, debes especificar una licencia en la cabecera del plugin. Eso permite a los usuarios saber cómo pueden emplear tu código. Para mantener la compatibilidad con el núcleo de WordPress, se recomienda el empleo de una licencia que trabaja con GNU General Public License (GPLv2+).

Hay muchos aspectos que puedes añadir a la cabecera de tu plugin que ayudarán al visualizarlo en tu administración de WordPress. Si estás planeando enviarlo a WordPress.org, debes seguir los requerimientos de cabeceras de plugins WordPress.

 

Ganchos (hooks): acciones (actions) y filtros (filters)

Existen ganchos diseminados por todo el núcleo de WordPress. Los ganchos WordPress te ofrecen la llave dentro de WordPress en puntos específicos en los que cambiar cómo WordPress se comporta sin editar ningún fichero del núcleo.

Hay dos tipos de ganchos en WordPress: acciones y filtros. Las acciones te permiten añadir o modificar funcionalidades de WordPress, mientras los filtros te permiten filtrar, o cambiar, contenido mientras éste es cargado.

Los ganchos no sólo son para desarrolladores de plugins; los ganchos se emplean extensivamente para proveer funcionalidades por defecto por el mismo núcleo de WordPress. Otros ganchos son marcadores de posición no empleados que están simplemente disponibles para tu uso cuando necesitas modificar cómo trabaja WordPress. Esto hace WordPress tan flexible.

Dos de los ganchos que necesitarás al crear un plugin son register_activation_hook()register_uninstall_hook(). El gancho activation se ejecuta cuando tú activas un plugin. Lo emplearás para proveer una función que inicie tu plugin – por ejemplo, crear valores por defecto en la tabla wp_options. El gancho uninstall se emplea para borrar después del plugin. Se ejecuta después del gancho deactivation, y borra el plugin de la instalación del usuario.

Adicionalmente, puedes añadir ganchos a través del código de tu plugin mediante do_action, que permitirá a los desarrolladores extender tu plugin, añadiendo funciones a través de tus propios ganchos.

Añadir funciones a los ganchos no es la única forma que puedes emplear. También puedes usar remove_action para eliminar una función definida anteriormente. Por ejemplo, si tu plugin es un añadido a otro plugin, puedes emplear remove_action con la misma función de llamada que fue añadida por el plugin anterior, con add_action. La prioridad de las acciones es importante en estas situaciones, como remove_action debe ejecutarse después de add_action.

Debes ser cuidadoso al remover una acción de un gancho, así como alterar las prioridades, pues puede ser difícil comprobar cómo esos cambios afectan otras interacciones con el mismo gancho. Recomendamos comprobar frecuentemente.

Puedes aprender más acerca de la creación de ganchos y la interacción con ellos en la sección ‘Ganchos y filtros’ de este manual.

 

Usar las APIs de WordPress

¿Sabías que WordPress provee una cantidad de interfaces de programación de aplicaciones (Application Programming Interfaces (API)? Estas APIs pueden simplificar enormemente el código que necesitas escribir en tus plugins. No quieras reinventar la rueda – especialmente cuando mucha gente ha realizado un gran trabajo y lo ha probado para tí. Una de las más comunes es la API Options, que hace facil guardar datos en la base de datos para tus plugins. Si estás pensando en usar URL en tu plugin, la API HTTP te puede interesar. Desde que estamos hablando acerca de plugins, puedes estudiar la API Plugin. Contiene una gran variedad de funciones que te asistirán en el desarrollo de plugins.

 

Como carga los plugins WordPress

Cuando WordPress carga la lista de los plugins instalados, busca a través de los directorios y subdirectorios para encontrar ficheros PHP con cabecera de plugin. Si todo tu plugin es justo un solo fichero, puede estar localizado directamente en el directorio de plugins, pero lo más común es que los ficheros de plugins residen en sus propios subdirectorios nombrados como el mismo plugin.

 

Incluir una Licencia de Software

Muchos plugins WordPress se lanzan bajo GPL, la cual es la misma licencia que usa WordPress. Además hay otras opciones posibles. Siempre es mejor indicar claramente la licencia que usa tu plugin.

En la sección Requerimientos de Cabecera, brevemente mencionamos cómo puedes indicar la licencia de tus plugins mediante la cabecera de plugin. Otra práctica común es colocar un bloque de licencia cerca de la parte superior de tu fichero principal del plugin (el mismo en el que tienes la cabecera del plugin).

Este bloque de licencia, al combinarlo con la cabecera del plugin queda más o menos así:

 

Ganchos de activación / desactivación

Los ganchos de activación y desactivación proveen maneras de realizar acciones cuando los plugins se activan o desactivan.

Los plugins pueden ejecutar una rutina de instalación cuando son activados, en orden de añadir reglas reescritas, añadir tablas personalizadas en la base de datos, o tomar valores de opciones por defecto. El gancho de desactivación, a veces, es confundido con el gancho de desinstalación. El gancho de desactivación se emplea principalmente para borrar datos temporales tales como cachés y directorios temporales.

Para establecer un gancho de activación, utiliza la función register_activation_hook():

register_activation_hook( __FILE__, ‘pluginprefix_function_to_run’ );

Para establecer un gancho de desactivación, utiliza la función register_deactivation_hook().

register_deactivation_hook( __FILE__, ‘pluginprefix_function_to_run’ );

El primer parámetro en cada una de estas funciones se refiere al fichero principal de tu plugin, que es el fichero en el que colocas la cabecera de plugin. Usualmente ambas funciones serán ejecutadas desde dentro del fichero principal del plugin; además, si las funciones están ubicadas en cualquier otro fichero, debes actualizar el primer parámetro para apuntar correctamente al fichero principal.

Uno de los usos más comunes para un gancho de activación es refrescar los permalinks WordPress cuando un plugin registra un tipo de post custom post. Esto elimina el error 404. Veamos un ejemplo de cómo hacerlo:

Utilizando el ejemplo desde arriba, lo siguiente es cómo revertir este proceso y desactivar un plugin:

 

Métodos de desinstalación

Tu plugin puede necesitar hacer alguna limpieza cuando es desinstalado de un sitio. Un plugin se considera desinstalado cuando el usuario lo ha desactivado, y clica en la opción borrado del plugin.

Cuando tu plugin es desinstalado, querrás limpiar cualquier regla añadida por el plugin, opciones o elementos específicos del plugin, o elementos de la base de datos que deban eliminarse.

En lugar de utilizar el gancho de desactivación, puedes hacer una de las siguientes opciones:

  • utilizar la función register_uninstall_hook()
  • crear un fichero uninstall.php en el subdirectorio de tu plugin.

uninstall.php

Cuando se emplea uninstall.php, el plugin siempre chequea la constante WP_UNINSTALL_PLUGIN, antes de ejecutar. Esta constante está definida por WordPress en tiempo real durante la desinstalación de un plugin, es decir, no existe si el fichero uninstall.php es ejecutado directamente.

He aquí un ejemplo que borra las entradas de la base de datos:

 

Prácticas recomendables

  • Prefijos en todo. Todos los ficheros, variables y funciones deberían ser prefijados con un único identificador.
  • Organización de ficheros. Debería ser, más o menos, así:

Deja un comentario

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