WordPress prové una poderosa ‘suite’ de APIs y herramientas que los desarrolladores de plugins pueden emplear para hacer sus interfaces administrativas fáciles de construir, seguras, y consistentes con el diseño del resto del panel de administración.
7. Shortcodes
En aras de la seguridad de tu sitio, WordPress no te permite añadir código PHP en un artículo. Esto previene al usuario de ejecutar código accidentalmente que podría inhabilitar el sitio o que dejara de funcionar correctamente. Pero tú puedes querer permitir a los usuarios incluir contenido dinámico que requiera emplear PHP para realizar una tarea. Para hacerlo, debes emplear los shortcodes.
6. Empecemos con nuestro plugin
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. Continuar leyendo «6. Empecemos con nuestro plugin»
5. Menús de administración
En este capítulo veremos los Menús de Administración. Estos son los menús que se muestran después de que un usuario inicia sesión. El menú de administración es donde añadirás las opciones para que los administradores del sitio gestionen tu plugin. Ver más información en Menús de Navegación.
4. Los Ganchos: Acciones y Filtros
Los ganchos son un medio para que una pieza de código interactúe con otra y la modifique. Constituyen el fundamento por el cual los plugins y los temas interactúan con el núcleo de WordPress, aunque también son empleados por el mismo núcleo.
3. Seguridad del plugin
¡Felicidades, tu código funciona! Pero, ¿es seguro? ¿Cómo protegerá el plugin a tus usuarios si sus sitios son atacados? Los mejores plugins en el directorio WordPress.org protegen la información de sus usuarios.
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-content > plugins 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:
1 2 3 4 |
<?php /* Plugin Name: Plugin para el tutorial de plugins WP */ |
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() y 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í:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
/* Plugin Name: Plugin Name Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates Description: This describes my plugin in a short sentence Version: 1.5 Author: John Smith Author URI: http://URI_Of_The_Plugin_Author License: GPL2 {Plugin Name} is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or any later version. {Plugin Name} is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with {Plugin Name}. If not, see {License URI}. */ |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
function pluginprefix_setup_post_type() { // Register our "book" custom post type register_post_type( 'book', array( 'public' => 'true' ) ); } add_action( 'init', 'pluginprefix_setup_post_type' ); function pluginprefix_install() { // Trigger our function that registers the custom post type pluginprefix_setup_post_types(); // Clear the permalinks after the post type has been registered flush_rewrite_rules(); } register_activation_hook( __FILE__, 'pluginprefix_install' ); |
Utilizando el ejemplo desde arriba, lo siguiente es cómo revertir este proceso y desactivar un plugin:
1 2 3 4 5 6 7 8 9 |
function pluginprefix_deactivation() { // Our post type will be automatically removed, so no need to unregister it // Clear the permalinks to remove our post type's rules flush_rewrite_rules(); } register_deactivation_hook( __FILE__, 'pluginprefix_deactivation' ); |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// If uninstall is not called from WordPress, exit if ( !defined( 'WP_UNINSTALL_PLUGIN' ) ) { exit(); } $option_name = 'plugin_option_name'; delete_option( $option_name ); // For site options in Multisite delete_site_option( $option_name ); // Drop a custom db table global $wpdb; $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}mytable" ); |
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í:
1 2 3 4 5 6 7 8 9 |
/my-plugin-name my-plugin-name.php uninstall.php /admin /js /css /images /includes /settings |
- Arquitectura del plugin. La arquitectura, u organización del código, que escojas para tu plugin, dependerá del tamaño del mismo. Se pueden encontrar patrones de arquitectura y patrones explicados en https://developer.wordpress.org/plugins/the-basics/best-practices/#architecture-patterns y en https://developer.wordpress.org/plugins/the-basics/best-practices/#architecture-patterns-explained.
- Puntos de inicio repetitivos. Más info en Boilerplate Starting Points.
1. Qué es un plugin
Los plugins son paquetes de código que extienden las funcionalidades del núcleo de WordPress. Los plugins WordPress están hechos de código PHP y otros elementos. Esto incluye, pero no se limita a, imágenes, CSS, y JavaScript.