
Crear un plugin para wordpress
Recientemente he programado un plugin para wordpress que permite una integración limpia y eficiente con paypal, también posibilita una amplia personalización desde el panel de opciones del propio wordpress.
Concluido el plugin voy a compartir lo aprendido 😉 pero en su versión resumida. Intentare explicar como crear un plugin, hacer uso de shortcode e integrar una página de opciones en el panel de administración de wordpress, aunque todo ello de forma sencilla y bastante esquematizada, a partir de ahí nuestra imaginación hará el resto.
Antes de comenzar, demos una vuelta por la wikipedia para conocer ¿que es un plugin? y recordar como son gestionados en wordpress.
1.- Crear el fichero contenedor del plugin (para wordpress)
Por ejemplo: «miplugin.php», su contenido debe ajustarse al formato siguiente:
/* Plugin Name: nombre de nuestro plugin Plugin URI: web del plugin (descarga, soporte, etc.) Description: descirpción detallada del plugin Author: nombre y apellidos del autor Version: 1.0 Author URI: web del autor */ /* Licencia */
2.- Vamos a programar!
Las siguientes lineas ya deben contener el código de nuestro plugin.
Empiezo por escribir el esqueleto principal del programa, la clase con algunas variables y funciones.
class miplugin { var $opt; var $table_name; // inicializamos plugin function miplugin() { } // instalar cosas del plugin function install() { } // desinstalar function uninstall() { } // página de configuración function config_page() { } //opciones de configuración function options_plugin() { } //ejecuta resultado function init() { } } $mp = new miplugin();
Como se observa, el plugin se encuentra bajo POO pero por razones de compatibilidad no usa las características de PHP5, es por ello que se hace uso de «var» para declarar las variables y «__construct» ha sido remplazado por el nombre del plugin en la función de inicialización.
La línea 19 es la encargada de crear un objeto «mp» de la clase «miplugin». A partir de aquí empieza la faena 😉
3.- Inicializamos el plugin
function miplugin() { global $wpdb; $this->table_name = $wpdb->prefix.'miplugin'; register_activation_hook(__FILE__, array(&$this, 'install')); //gancho para instalar register_deactivation_hook(__FILE__, array(&$this, 'uninstall')); //gancho para desinstalar add_action('admin_menu', array(&$this, 'config_page')); add_shortcode('mundo', array(&$this, 'init')); }
Esta función es ejecutada automáticamente cuando se crea un objeto de la clase, puesto que tiene el mismo nombre.
En la línea 2 tomamos el objeto $wpdb; que es el encargado de llevar la gestión de bases de datos para wordpress. Siempre que queramos interactuar con la base de datos de wordpress será necesaria esta llamada.
En la línea siguiente almacenamos en «$this->table_name» el nombre de la tabla para nuestro plugin.
Con register_activation_hook y register_deactivation_hook podemos indicar que funciones deben ejecutarse «installa/uninstall» cuando el plugin sea activado/desactivado desde el panel de administración de wordpress.
La línea 6 se encarga de implementar la función «config_page» que debe llamarse para que podamos tener un menú de opciones del plugin integrado en wordpress (solapa opciones). Para ello debe hacerse uso de la función de wordpress add_action.
La línea 7 hace que podamos usar las shortcodes (códigos rápidos) como llamadas al plugin. Esto hace que por ejemplo cuando se escribe «[mundo]» en el contenido de un post, el plugin llame a la función «init» puesto que ha sido implementado con add_shortcode.
4.- Instalar/desinstalar
Hacemos un alto en el proceso anterior para comentar las funciones install/uninstall.
function install() { global $wpdb; $sql = 'CREATE TABLE `'.$this->table_name.'` ( `frase` varchar(100) NOT NULL default "" ) ENGINE=MyISAM DEFAULT CHARSET=utf8'; $wpdb->query($sql); $wpdb->query('INSERT INTO `'.$this->table_name.'` SET frase = "hola mundo!!!"'); }
Aquí va la creación de la tabla para el plugin en la base de datos de wordpress. A continuación inserté un registro donde uno de los campos contiene el valor «hola mundo!!!».
function uninstall() { global $wpdb; $sql = 'drop table `'.$this->table_name.'`'; $wpdb->query($sql); }
Cuando desinstalamos el plugin se ejecuta la función «uninstall» y con ella procesamos el borrado de la tabla del plugin.
5.- Página de configuración del plugin
function config_page() { add_options_page('mi plugin', 'mi plugin', 8, 'miplugin_options', array(&$this, 'options_plugin')); } function options_plugin() { global $wpdb; if (isset($_POST['update'])) { //aquí podemos poner el sql update, basado en los datos de un formulario } //aquí va el formulario para las opciones de configuración }
La ya mencionada función » add_action(‘admin_menu’, array(&$this, ‘config_page’));» ejecutada en la inicialización del plugin, es la encargada de indicar que debe procesarse la función «config_page» que a su vez pide las opciones que debe contener el plugin a «options_plugin».
6.- Resultado del shortcode
function init($atts) { global $wpdb; // options (config) $this->opt = $wpdb->get_row('SELECT * FROM '.$this->table_name.' LIMIT 1', ARRAY_A); // atributes (user) extract(shortcode_atts(array('frase' => $this->opt['frase']), $atts)); include('fichero.php'); }
Volviendo al proceso del programa, cuando se escribe en un post el shortcode «[mundo]» se ejecuta la función «init» y se le pasa como parametro el shortcode con sus atributos «$atts«.
[mundo] //esto es un shortcode [mundo frase="hola mundo 2!!!"] //esto es un shortcode con un atributo
Esta función «init($atts)» se encarga de hacer una consulta sql «select» a la tabla del plugin y obtener la frase «hola mundo!!!» que tenemos almacenada.
A continuación la función «extract(shortcode_atts(array(‘frase’ => $this->opt[‘frase’]), $atts));», es crucial puesto que se encarga de «repartir» los pares de valores tomados de los atributos.
Es por esto que podamos contener en la variable $frase = «hola mundo!!!» (en caso de que se llamará al shortcode sin atributo) o «hola mundo 2!!!» si se ha llamado con el atributo.
Por último y para separar un poco el html del php, pongo un «include» que llama a un fichero.php (debe estar en el mismo directorio que el plugin) .
//fichero.php
El fichero muestra la frase.
Consejos
- Creo que es importante emplear cierto tiempo en buscar nombres originales para nuestras funciones y variables (sobre todo si se programe de forma estructurada y no orientada a objetos), puesto que debemos tener en cuenta la compatibilidad con otros plugins y el propio código de wordpress.
- Se puede aprender un montón de cosas viendo el código ordenado de algunos plugins 😉
6 Comments
nekrodomus
Muy buen manual para empezar a programar un plugin de WP. Yo estuve intentando encontrar algo como esto hace unas semanas y no encontré nada en español, al final peleándome con el código y con google di con lo que hacer.
Esto me hubiera venido genial :).
Saludos.
Tecnologias Microsoft
bastante bueno tu articulo y tu codigo es muy claro.
gracias
Eduardo
Buen tutorial. Eres el primero que encuentro y que utiliza POO en un plugin. Me gustó mucho la estructura de la clase.
Podrias poner un ejemplo como trabajar con varias clases en distintos archivos .php?. Como incluyo una clase dentro de otra?
Un saludo.
alxdevelop
Excelente tutorial.. igual yo estaba buscando un tutorial que me expusiera las bases de la creacion de un plugin.. y te felicito.. abarcaste mas informacion que las demas paginas.. si tienes o haces otro tutorial mas completo o relacionado sin duda lo leeria.. saludos
Alfredo Puer
Excelente tutorial, era lo que estaba buscando muchas gracias!
Crear Plugins Wordpress ← Tutoriales de programación
[…] http://aurea.es/crear-un-plugin-para-wordpress/ […]
Comments are closed for this post