(Después de un par de años de estar probando y desarrollando para WordPress, he decidido el volver a re-escribir sobre un tema de una entrada anterior.)

Ampliar las funcionalidades de WordPress es realmente sencillo. Como todo framework, aprender como extenderlo puede ser intimidante. Pero una vez que se entiende su funcionamiento, todo se abre paso.

Entonces, desarrollar plugins o extender temas en WordPress se vuelve mucho más fácil.

Extender WordPress: Los filtros y acciones son tus amigos

La forma en la cual nosotros podemos agregar nuevas funcionalidades a WordPress es, normalmente, usando los llamados filtros y acciones.

Estos también son llamados hooks, o ganchos en español.

Los filtros y las acciones son, en esencia, lo mismo. Pero cambian en un aspecto fundamental: Que los filtros regresan datos y que las acciones nos permiten alterar el comportamiento.

Cada uno de estos hooks posee un nombre único, el cual describe de forma general en donde se encuentra, en que momento se ejecuta o el tipo de datos los cuales puedes cambiar.

Para poder usar un filtro o acción, nosotros debemos primero pegarnos a dicho hook. Esto se logra usando las funciones add_filter o add_action de WordPress.

Debemos usar add_filter si nos vamos a adjuntar a un filtro y add_action si se trata de una acción.

Con esas funciones, nosotros podemos declarar a cual hook queremos unirnos y cual será el código que queremos que se ejecute.

Esta es la forma en la cual lo hacemos:

En este ejemplo, adjuntamos una función a los filtros script_loader_src y style_loader_src. Cuando estos filtros se ejecuten, van a pasar un valor que tomará la función como la variable $cadena. La cual a su vez regresará un valor ya modificado.

De esta forma, podemos hacer prácticamente cualquier cosa con los datos que reciba nuestro código.

Hay que recordar que un filtro normalmente espera que se regrese algún dato. Por lo cual, de no hacerlo, es posible que suceda un comportamiento no esperado.

¿Que hay de las acciones?

En el caso de las acciones, las cosas son un poco diferentes.

Normalmente, las acciones se usan para agregar un comportamiento dentro de WordPress o un plugin.

Las acciones normalmente las usamos para imprimir HTML, agregar estilos o javascript, agregar páginas administrativas, entre otras tareas que no requieran regresar datos.

Un ejemplo de esto es la acción wp_enqueue_scripts, con la cual normalmente se agrega todo el Javascript y el CSS que se usará en el Front-end.

Pero incluso podemos ir más allá al extender WordPress.

Por ejemplo, podemos usar la acción admin_menu para crear páginas nuevas dentro del back-end de WordPress con la función add_submenu_page.

¿Qué hay de las funciones anonimas y clases?

Normalmente el código que nosotros adjuntaremos a los filtros o acciones, para extender WordPress, estarán dentro de una función.

Lo que normalmente implica que se deberá de crear una función dedicada totalmente a dicho filtro o acción. Misma que estará disponible para el resto de la aplicación.

Una forma de solucionar esto es declarando la función de callback de manera anónima al momento de pegarnos al filtro o acción.

Por ejemplo, podemos hacer lo siguiente:

De esta forma, la función estará solamente disponible para el filtro la cual la invocó.

Sin embargo, esto también implica que nuestro código se vuelve poco flexible.

Por ejemplo, una ventaja de usar el método tradicional, es que podemos usar remove_filter para quitar código que ya este adjuntado. Algo que no es posible con las funciones anónimas.

En el caso de las clases, nosotros debemos de dedicar el método __construct para definir las acciones y filtros que usaremos.

Recordando que, al momento de agregar los filtros o acciones, deberemos referenciar la propia clase:

Extiende tus temas o plugins con filtros y acciones

Los filtros y las acciones no son exclusivas del núcleo principal de WordPress, si no que estos pueden ser implementados tanto en temas como en plugins.

Con esas definiciones, nosotros podemos saber que datos podemos cambiar de otro software desarrollado para WordPress.

Incluso podemos indicarle a otros programadores donde pueden adjuntar funciones para extender la funcionalidad de nuestro software.

Por ejemplo, para agregar un filtro a un tema o plugin, solo hace falta agregar algo como esto:

En este caso se creo un filtro de nombre filtrar_valor con apply_filters al cual se pueden adjuntar otras piezas de software usando la función add_filter.

Debido a que se trata de un filtro, debemos asegurarnos de que el resultado sea asignado a una variable. Preferentemente la propia variable filtrada.

Pero eso cambia cuando se usa la función do_action, con la cual definimos acciones. En ese caso no hace falta asignar ningún valor.

Extender WordPress y plugins: Encuentra esos filtros y acciones

Otra de las cosas que puedes hacer con las funciones apply_filters y do_action es el encontrar donde podemos extender el software.

¿Quieres cambiar algo de un plugin pero no sabes donde se puede? ¿Quieres hacer algo pero solo se te ocurre el modificar el original?

La solución está en buscar por las funciones apply_filters y do_action en el código fuente.

Muchos desarrolladores agregan filtros y acciones a sus plugins o temas para permitirle a otros hacer más. Un buen ejemplo de esto es el caso que tuve con Swift Performance.

No siempre encontrarás documentación sobre estos hooks, pero ver la función en el contexto de la aplicación te ayudará a entender que es lo que sucede.

A veces, solo hace falta encontrar el hook correcto en el código para hacer las cosas.

Aprende a usar las prioridades y argumentos

Otra de las claves para extender WordPress correctamente es el saber en que momento debemos de ejecutar nuestro código.

Tanto add_filter como add_action tienen un parámetro de prioridad, el cual es muy importante para definir correctamente el orden de ejecución.

La prioridad está representada en un número, el cual mientras sea más bajo, más tarde se ejecutará el código que queremos. El default es 10.

Esta prioridad es de gran ayuda en casos en los cuales queremos hacer algo antes que los demás plugins, por ejemplo.

Con una prioridad de 5, podríamos entonces cargar nuestros scripts con la acción wp_enqueue_scripts antes de que otras librerías lo hagan.

Pero con una prioridad de 999, nos aseguramos de que todo lo demás ya haya terminado. Por si queremos filtrar los datos que otro plugin cambió, o asegurarnos de que una dependencia ya exista.

Finalmente, el último parametro de add_filter o add_action nos permite definir hasta cuantos parametros de entrada vamos a aceptar desde el filtro o acción.

Normalmente solo se pasa un parametro. Pero en algunas ocaciones, se pasan más datos desde las funciones apply_filters o do_action.

Cuando es así, y queremos usar esos datos, podemos indicarle a WordPress que queremos esos datos:

Para cerrar

Como se puede apreciar, el extender WordPress es ralmente sencillo. En especial cuando aprendes a usar y encontrar los puntos en los cuales puedes adjuntar tu propio código.

Personalmente, las acciones son las que más oportunidades ofrecen a la hora de personalizar las funciones. En especial por que se disparan en momentos clave.

Sin embargo, nosotros podemos personalizar practicamente todo. Solo hace falta ver la lista de acciones y de filtros disponibles en WordPress.

Solo es cuestión de invertir suficiente tiempo en leer el suficiente código e ir probando cual filtro o acción se ajusta alo que necesitamos.