Cómo crear un plugin personalizado en WordPress

En este tutorial aprenderemos a cómo crear un plugin personalizado para nuestro WordPress con todas aquellas funciones extras que queremos añadir.

En la mayoría de tutoriales de añadir funcionalidades en tu WordPress, lo que siempre te indican es que lo agregues en el archivo functions.php del tema que tienes activo.

Pero es un error descomunal.

Nunca debemos añadir funcionalidades en functions.php. Si creamos una funcionalidad y lo introducimos en ese archivo, cuando cambiemos de tema, perderemos dicha funcionalidad.

¿Os dais cuenta del peligro que comporta esto? 

Imaginaros que tenemos una página web de un directorio de películas y hemos creado un Custom Post Type de «Película». Esta nueva función la hemos añadido en el archivo de functions.php de nuestro actual tema. Pero en un momento dado, decidimos cambiar de apariencia, es decir, cambiar de tema.

Todas las películas de nuestra página web desaparecerán, ya que esta funcionalidad estaba ligada con el tema de nuestra web.

¿Cuál sería la manera correcta de hacerlo?

Con un plugin personalizado. De esta forma, esta funcionalidad no estará ligada con la apariencia de nuestro tema. Podremos cambiar el tema tantas veces queramos, porque mientras el plugin siga activado, nuestras funciones personalizadas también.

¡Vamos a ello!

Crear tu propio plugin personalizado de funciones

Primeramente iremos a nuestro FTP y crearemos una nueva carpeta en «wp-content/plugins». En mi caso, le he llamado «funciones-personalizadas», podéis llamarlo cómo queráis.

Una vez hemos creado la carpeta, crearemos el archivo «funciones-personalizadas.php». En este caso, tendremos que poner el mismo nombre que la carpeta.

¡Vamos a programar nuestro primer plugin! Modificaremos el archivo e introduciremos el siguiente código:

<?php
/*
Plugin Name: Funciones personalizadas
Plugin URI: https://www.joelcantero.com/
Description: Funciones personalizadas.
Version: 1.0
Author: Joel Cantero
Author URI: https://www.joelcantero.com/
License: GPL
License URI: https://www.gnu.org/
*/

No os asustéis. Vamos a repasar línea a línea lo que hemos escrito:

  • <?php: simplemente indica que el lenguaje del archivo será PHP. Es una línea obligatoria, ya que todos los plugins deben estar escritos en PHP.
  • /*: este símbolo significa que lo que viene a continuación no es código en sí, es un comentario. Aunque los comentarios no aportan nada al plugin, indicaremos una información que es obligatoria para que WordPress lo identifique como plugin. 
  • Plugin Name: este campo es obligatorio. Aquí deberemos introducir el nombre del plugin. En mi caso le he llamado «Funciones personalizadas», como el nombre del archivo que había creado (aunque no debe ser el mismo).

Los campos que vienen a continuación no son obligatorios, se pueden prescindir de ellos.

  • Plugin URI: en este campo indicamos la página web del plugin, en mi caso he introducido mi página web.
  • Description: una pequeña descripción de la funcionalidad del plugin.
  • Version: indicaremos la versión del plugin. Este campo es útil cuando nuestro plugin está en el repositorio de WordPress. Cuando queramos actualizar nuestro plugin con más funcionalidades, deberíamos subir el número de la versión. En nuestro caso es indiferente, le pondremos 1.0.
  • Author: el autor del plugin. Nuestro nombre.
  • Author URI: la página web del autor del plugin. He puesto mi página web otra vez.
  • License: la licencia del plugin. Cómo todo WordPress es GPL, también le he asignado la misma licencia.
  • License URI: la página web de la licencia. GPL pertenece a GNU.
  • */: indica que el comentario acaba en este punto. A partir de la siguiente línea ya podremos empezar a escribir el código de nuestro plugin.

Una vez hemos guardado el archivo y está en el directorio de «wp-content/plugins/», podríamos ir a verlo en nuestro panel de administración. Aparece en «Plugins», «Plugins instalados»:

Nuestro plugin personalizado aparece en el menú de Plugins.
Nuestro plugin personalizado aparece en el menú de Plugins.

¡Magia! ¿A qué hace ilusión ver nuestro plugin que acabamos de crear en el panel de administración?

Si lo activamos, veremos que no hace absolutamente nada en nuestra página web. Tal como está ahora mismo es un plugin absurdo.

¿Qué le podemos añadir?

Añadir funciones personalizadas a nuestro plugin

Action hooks

Son ubicaciones de nuestro WordPress dónde podemos añadir o eliminar acciones. Por ejemplo, en este tutorial enseño cómo eliminar la funcionalidad de comentarios en WordPress, incluso de nuestro panel de administración. Se clasifican en dos funciones:

  • add_action: cómo su nombre indica, añade acciones en ubicaciones concretas.
  • remove_action: elimina una acción ya predefinida de WordPress.

Vamos a verlo con un claro ejemplo. Añadiremos un add_action que imprima la palabra «Hola» en nuestra cabecera de la página web. Lo haremos con este código:

add_action('wp_head', 'jc_hola');
function jc_hola() {
	echo 'Hola';
}

Cómo vemos, hemos creado una función «jc_hola()» que simplemente imprime (con el comando «echo») la palabra «Hola». El add_action simplemente ejecuta nuestra función en la ubicación wp_head, que es el header (la cabecera) de nuestra página web. Este sería el cambio que realizaría:

Action hook en wp_head.
Action hook en wp_head.

Aunque no sea muy espectacular, nos podemos hacer una idea del potencial que tiene para modificar por completo nuestro WordPress.

En la documentación de WordPress están listados todos los action hooks que tenemos a nuestra disposición.

Filter hooks

Este segundo tipo de hook nos permitirá modificar toda la información que muestra nuestro WordPress. A diferencia de los action hooks, no añaden ninguna información, simplemente modifican (filtran) una información existente.

  • Database reads: este tipo de filter hook lee la base de datos y modifican la información antes de mostrarlo por pantalla. Es decir, no modifican la base de datos, simplemente la modifican «on the fly». Por ejemplo, si queremos editar el título de una entrada, podemos utilizar un filtro de database read para que ponga en mayúsculas el título antes de mostrarse por pantalla. 
  • Database writes: en este caso, sí que modifican la base de datos. Antes de introducir alguna información en la base de datos, la modifican. Por ejemplo, podemos crear un filter hook de database write para que cuando un usuario, publica una entrada, modifique el título que haya introducido cómo nosotros queramos.

De la misma manera, podemos consultar todos los filter hooks que nos proporciona WordPress en su documentación.

Custom Post Types

Los CPT deben estar sí o sí en un plugin de funciones personalizadas. Si queremos almacenar un tipo de información en nuestro WordPress (ya sea libros, películas, tutoriales, etc), debería ser totalmente paralelo a la apariencia de nuestro tema.

Resumen y conclusión

Aunque haya múltiples formas de añadir código a nuestro WordPress, mediante un plugin personalizado, sin ningún tipo de duda, es la mejor. Es muy recomendado tener el control de todas las funcionalidades que añadamos y tengamos  modificarlas cuando sea necesario

Como siempre, para cualquier duda o pregunta podéis contactar conmigo y muy amablemente os echaré una mano en todo lo que pueda.