You are here
Creando un plugin para WordPress Sin categoría 

Creando un plugin para WordPress

Creando un plugin para WordPress

 

La mayoría de los plugins que creemos irán a la carpeta wp‐content/plugins de nuestro sistema WordPress. Dentro de esta carpeta debemos crear una nueva, y nombrarla con una clave que referencie a nuestro plugin. Como esta es la primera clase de “Crear Plugin para WordPress” y queremos poner un tutorial sencillo, usaremos: wp‐content/plugins/mi_plugin. Dentro de nuestra nueva carpeta, crearemos un primer archivo llamado mi‐plugin.php

 

Abrimos este archivo con un editor de código PHP, y escribimos la cabecera. La cabecera son una serie de líneas que aportan información sobre el plugin a WordPress a la hora de mostrarlo en la pantalla de administración, como el nombre, la descripción, la versión, el autor, etc.

 

 

Una cabecera simple y básica podría ser como esta:

 

 

<?php

/*

Plugin Name: Mi plugin

Plugin URI: http://www.web-sistemas.com/ Description: Crear Plugins para WordPress, Author: Geovanny Quilarque

Author URI: http://www.web-sistemas.com/ Version: 1.0

License: GPLv2

*/

?>

 

Esta cabecera es obligatoria en todos los plugins que hagamos.

 

 

Si hemos seguido correctamente los pasos hasta aquí, ya debería aparecer nuestro plugin en la lista de plugins de nuestro WordPress. Eso sí, activarlo o desactivarlo no hace nada,

evidentemente, puesto que no hemos programado ningún tipo de funcionalidad.

 

 

Dotando de funcionalidad al plugin

 

A partir de aquí, lo que quieras que tu plugin haga, es totalmente cosa tuya. Depende de su

imaginación. Pero no basta con escribir funciones y llamarlas.

 

 

WordPress tiene una serie, o mejor dicho, una GRAN serie de “hooks“. Ya hemos hablado de ellos

alguna vez, pero volveremos a explicar el concepto.

 

 

Un “Hook” o “Gancho”, en WordPress, es un momento en la carga del sistema al que podemos acoplar nuestras funciones. Es decir, por ejemplo, si necesitamos añadir un menu nuevo al administrador de WordPress, programamos la función que corresponde, y después, la asociamos al hook “admin_menu”, para que cuando se esté cargando el menú de administración, nuestra

 

función se ejecute. Muy práctico, ¿Verdad?

 

 

Los hooks se llaman durante “acciones” o durante “filtros”, con add_action o con add_filter. ¿Qué

diferencia hay?

 

 

Acciones: Las acciones son aquellos ganchos que el sistema lanzará en puntos específicos durante la ejecución, o cuando eventos específicos ocurran. Tu plugin puede especificar que sus funciones sean lanzadas en estos puntos, usando la API de acciones.

Filtros: Los filtros son ganchos que WordPress lanza para modificar textos de varios tipos antes de añadirlos a la base de datos, o antes de mostrarlos en pantalla. Tu plugin puede especificar que sus funciones sean ejecutadas para modificar ciertos textos en esos puntos, usando la API de filtros.

En ocasiones, usar una acción o un filtro nos conducirá al mismo resultado, independientemente de lo que usemos. Por ejemplo, si quieres que tu plugin cambie un texto de un post, puedes añadir una acción al hook ‘publish_post’ (que se encargará de modificarlo cuando se guarde en la base de datos), o bien, usar un filtro en el hook ‘the_content’ (y el contenido será modificado al

mostrarse en pantalla). Puedes leer más información sobre esto en el Codex.

 

 

 

 

Si no asociamos una función a un hook, esta no se ejecutará nunca, salvo que durante la ejecución normal del sistema (en un theme, o en otra parte de nuestro plugin) la llamemos

directamente.

 

 

A la hora de crear funciones, debemos tener mucho cuidado. Si dos plugins implementan la misma función, la consecuencia es un error grave en el sistema que impide que este cargue. Asi

pues, se recomienda encarecidamente:

 

 

Diferenciar nuestras funciones y  variables globales correctamente, inventando algún  tipo  de prefijo o palabra que haga nuestro plugin único, o lo más único posible. No podemos saber, evidentemente, si otro programador en otra esquina del mundo va a implementar exactamente el mismo nombre de función, con el mismo distintivo, y se va a dar la casualidad en un tercer rincón del planeta de que un usuario instale los dos plugins en su WordPress, de acuerdo. Pero podemos intentarlo. Por ejemplo, en este caso, vamos a llamar a nuestras funciones con el prefijo “mi_plugin”. Bien, es un mal ejemplo, ¿Cuántos plugins empezarán con ‘mi_plugin’? Muchísimos, fijo. Quizá podríamos darle una vuelta, que sea ‘‐mip_’, ‘   miplugin_’, ‘codigonexo_mi_plugin’, o lo que se nos ocurra. Recuerda que luego tienes que usarlo, y que cuanto más largo, mas difícil de recordar y más tedioso de reescribir será.

 

Comprueba que la función no exista antes de definirla. Este paso es mucho más inteligente que el anterior (pero no lo sustituye, que conste). Si la función ya existe, directamente no se define la nuestra. Esto tampoco soluciona el problema que comentabamos antes, pero en este caso, en lugar de provocar un error en el sistema, simplemente no funcionará nuestro plugin. Puedes

hacerlo así:

 

 

if(!function_exists(‘mi_plugin_function’)){

function mi_plugin_function(){

// Contenido de la función

}

}

Y luego, a la hora de hacer uso de dicha función en algún punto del plugin, comprobar si dicha función existe, pero a la inversa:

 

 

if(function_exists(‘mi_plugin_function’)){

mi_plugin_function();

}

 

 

Por otro lado, también debemos saber que WordPress cuenta con funciones para (casi) todo en el sistema. ¿Quieres añadir un menu? add_menu_page. ¿Quieres enviar un email? wp_mail.

¿Quieres obtener el título de un post? get_the_title. ¿Te has inventado un nuevo shortcode?

add_shortcode. Así que cuando se nos ocurra algo para hacer en el sistema, recuerda estos consejos antes de empezar a programar:

 

 

Probablemente, a alguien se le ha ocurrido antes que a ti. Y esto no es malo, al contrario: alguien se ha partido la cabeza para conseguirlo, y por lo general, la solución suele estar en Internet más

o menos escondida.

 

 

Si Google es el mejor amigo de un desarrollador, el Codex de WordPress es el segundo mejor amigo de un desarrollador de WordPress (el primero sigue siendo Google). No solo por ser la documentación oficial de WordPress para desarrolladores, si no porque además sus foros son ricos en preguntas raras de narices, que en muchos casos o bien nos aclararán la duda, o bien nos pondrán en la pista. Imprescindible saber inglés, aunque eso es algo que se aplica a toda nuestra

profesión, no debería ser un grave problema…

 

 

Otro gran sitio donde mirar es Stack Overflow, aunque, por lo general, cuando buscas en Google, es de los primeros sitios que sale con respuestas y suele ser más efectivo.

 

No tengas miedo a preguntar.

 

 

Si ninguno de estos consejos realmente ha dado solución a tu problema o te lo ha puesto un poco más fácil, recuerda que nada es imposible. Intenta simplificar el problema, dividirlo en partes, y busca soluciones a cada parte. No te atasques, no te centres en un asunto al que no le ves solución salvo que no tengas alternativa. Si puedes pasar a otra tarea más sencilla donde

despejarte, cuando vuelvas quizá lo veas todo mas claro. Y sobre todo, nunca te desanimes.

 

 

Ahora vamos a desarrollar un pequeño ejemplo consistente en un submenú dentro del menú

“Ajustes” y una página donde poder guardar opciones directamente en la base de datos de

WordPress.

 

 

El menú

 

Como ya hemos dicho, WordPress tiene funciones para todo lo “típico” que los plugins hacen. Añadir un submenú a la sección Ajustes entra dentro de lo normal, así que WordPress lo

contempla, y podemos hacerlo tal que así:

 

 

function miplugin_menu_opciones(){

 

 

add_options_page(‘Título de la pagina’,'Título del menu’,'read’,'miplugin-

ops’,'miplugin_pagina_de_opciones’);

 

 

}

 

 

Aunque aquí utilizamos la función “add_options_page“, en realidad esta llama a la función genérica de creación de submenús, “add_submenu_page“, solo que no tienes que preocuparte por especificar de dónde cuelga este submenú. Los cinco parámetros son: el título de la página (el que aparece arriba del navegador y en la pestaña), el título que aparecerá en el submenú, el permiso mínimo que debe tener el usuario para ver este submenú (‘read’ es de los más bajos, estaría abierto a todos los usuarios con acceso a wp‐admin), un slug único para este menú, y la

llamada a la función que se ejecutará cuando pulsemos en este menú.

 

 

¡Ojo! Si en tu plugin quieres crear un tipo personalizado, no es necesario que crees un menú específico para él ya que se creará automáticamente el menú, el submenú de listado de entradas y el submenú de crear nueva entrada. Si quieres añadir más cosas (opciones, otras páginas), sí debes crear submenús (salvo para taxonomías, estas también crean sus propios menús donde corresponde).

 

¿No funciona? Evidentemente, ¿Qué hemos dicho acerca de los hooks? Añadid esta línea justo

debajo de la función.

 

 

add_action(‘admin_menu’,'miplugin_menu_opciones’);

 

 

add_action añade, en el momento en que ocurre ‘admin_menu’, la ejecución de la función

‘miplugin_menu_opciones’, es decir, la que pone el submenú en su sitio.

 

 

La página de funciones

 

Al añadir el submenú hemos especificado un parámetro como ‘miplugin_pagina_de_opciones’. Esta es la función que se ejecutará al acceder a nuestro submenú. Así que vamos a definirla; en

realidad, esta función lo que va a hacer es mostrar un formulario HTML…

 

 

function miplugin_pagina_de_opciones(){

?>

<div class='wrap’><h2>Opciones de mi sitio</h2></div>

 

<form method='post’>

<input type='hidden’ name='action’ value='salvaropciones’>

<table>

<tr>

<td>

<label for='telefono’>Telefono</label>

</td>

<td>

<input type='text’ name='telefono’ id='telefono’ >

</td>

</tr>

<tr>

<td>

<label for='direccion’>Dirección</label>

</td>

<td>

<input type='text’ name='direccion’ id='direccion’ >

</td>

</tr>

<tr>

<td>

<label for='email’>Email</label>

</td>

<td>

<input type='text’ name='email’ id='email’ >

</td>

 

</tr>

<tr>

<td colspan='2′>

<input type='submit’ value='Enviar’>

</td>

</tr>

</table>

</form>

<?php

}

 

Formulario HTML que, dicho sea de paso, carece de funcionalidad. Si pulsamos en Enviar no pasa nada. Retoquemoslo un poco.

 

function miplugin_pagina_de_opciones(){

 

echo(“<div class='wrap’><h2>Opciones de mi sitio</h2></div>”);

 

if(isset($_POST[‘action’]) && $_POST[‘action’] == “salvaropciones”){ update_option(‘miplugin_telefono’,$_POST[‘telefono’]); update_option(‘miplugin_direccion’,$_POST[‘direccion’]); update_option(‘miplugin_email’,$_POST[‘email’]);

echo(“<div class='updated message’ style='padding: 10px’>Opciones guardadas.</div>”);

}

 

?>

 

<form method='post’>

<input type='hidden’ name='action’ value='salvaropciones’>

<table>

<tr>

<td>

<label for='telefono’>Telefono</label>

</td>

<td>

<input type='text’ name='telefono’ id='telefono’ value='<?=get_option(‘miplugin_telefono’)?>’>

</td>

</tr>

<tr>

<td>

<label for='direccion’>Dirección</label>

</td>

<td>

<input type='text’ name='direccion’ id='direccion’ value='<?=get_option(‘miplugin_direccion’)?>’>

</td>

</tr>

<tr>

<td>

<label for='email’>Email</label>

</td>

<td>

<input type='text’ name='email’ id='email’ value='<?=get_option(‘miplugin_email’)?>’>

</td>

</tr>

 

<tr>

<td colspan='2′>

<input type='submit’ value='Enviar’>

</td>

</tr>

</table>

</form>

 

<?php

}

 

Ahora sí. Esta es una forma sencilla de hacerlo sin calentarnos mucho la cabeza. Detectará por

$_POST si entran nuevos datos. Si es asi, actualizamos las opciones con update_option. Además, los campos se rellenan con get_option si la opción existe y tiene un valor no nulo. Y en cualquier parte de nuestra web podemos recuperar estos valores con la misma función, get_option, pues hemos establecido opciones globales al sistema.

 

 

(Nota: los validadores y las comprobaciones de errores son cosa suya. La función update_option devuelve true o false dependiendo de si los datos se han salvado o no)


 

Deja un comentario

Logged in as BlogUneWeb. Log out?

Related posts

Comments

Leave a Comment


*