Cómo crear una función en WordPress y ejecutarla cuando queramos

Publicada en WordPress.

Tanto para empezar a desarrollar tus propios temas o plugins para WordPress, como para editar el código de aquellos que ya estás usando hoy, saber escribir funciones en PHP es básico.

Si te limitas a copiar y pegar el código que encuentras por Internet, puedes llegar a experimentar situaciones muy frustrantes: el código no funciona como tu quieres, se rompen funcionalidades de tu web, o incluso sin tener ni idea estás comprometiendo la seguridad de tu instalación.

Y lo peor de todo es que no sabes porqué pasan estas cosas, especialmente si no entiendes el fragmento de código que estás copiando y pegando. Esto es algo a evitar siempre. Y para ponerle remedio, no nos queda otra que aprender.

Para ayudarte a mejorar tus habilidades en WordPress aquí tienes un pequeño tutorial para aprender a escribir funciones PHP y a ejecutarlas en tu WordPress.

Voy a intentar que sea todo lo más sencillo posible. ¿Lo conseguiré? Veamos…

Instrucciones para escribir una función en WordPress

Para poder ejecutar una función en WordPress lo primero que has de hacer es programarla. Y esto quiere decir escribirla allí dónde toque. Veamos cómo lo hacemos.

Qué necesitamos

En principio, para escribir una función en PHP en tu WordPress no necesitas nada adicional. A no ser que tengas los permisos limitados o tu usuario tenga un rol que no sea administrador, desde el propio WordPress puedes editar el archivo functions.php de tu tema. Ve al menú Apariencia, luego a Editor de temas, y allí podrás editar este archivo.

¡Ojo! Con esto no quiero decir que meter código en el archivo functions.php sea la mejor opción. De hecho, puede ser un desastre total si el código que metes tiene errores, ya que sufrirás el pantallazo blanco y tu web dejará de funcionar hasta que lo arregles. Recuerda que suele ser mucho mejor meter tu código en un plugin.

Editor de temas de WordPress.
Editor de temas de WordPress.

Si quieres ser un desarrollador con todas las letras, necesitarás un editor de código y una instalación de WordPress de pruebas. Para la instalación local de WordPress puedes usar Local by Flywheel, que es bastante sencilla de usar. Si eres más pro puedes intentar usar Lando, pero tampoco hace falta que te compliques demasiado ahora.

En cuanto al editor de código, puedes usar desde un editor de texto cualquiera (sin formato) hasta algo más profesional como Atom o VisualStudio Code. Por cierto, yo ahora uso este último y estoy encantado.

Por último, si no utilizas una instalación de WordPress local y quieres editar los archivos PHP de tu servidor, necesitarás un cliente de FTP para poder acceder a estos. En esta entrada te explico unos cuantos.

Documenta tú código

Crear documentación en tu código es algo que, te guste o no, debes hacer. Ya no por los demás que tengan que leer tu código algún día, sino por tu yo del futuro, que seguro que se olvida de qué hiciste y te lo agradecerá cuando tenga que revisar código antiguo.

Para escribir documentación en una función te recomiendo que utilices el estándar PHPDoc o DocBlock, tal y como se indica aquí.

Imagínate que quieres enviar un email cada vez que se publica una entrada en tu WordPress. En tal caso, deberías poner un comentario como el siguiente:

Fíjate que los comentarios están definidos dentro de unos caracteres especiales /**/. Si utilizas un editor de código seguramente ya se encargue este de completarte los asteriscos en cada salto de línea.

En el comentario anterior primero en una frase corta definimos la intencionalidad de la función: qué va a hacer. Luego, podemos utilizar una descripción larga explicando en más detalle lo que la función realiza.

Por otro lado, el código lo puedes comentar en tu propio idioma, no hace falta que esté en inglés. No obstante, si los comentarios y todo lo demás ya los escribes en inglés, si luego subes el código a un repositorio público y otros programadores lo ven, les facilitarás la vida para entenderlo.

La cabecera de la función

Una vez tenemos la documentación básica de la función, podemos pasar a escribir su cabecera. Esto es, el nombre de la función junto a los parámetros (si los tuviera) y las llaves que delimitan su ámbito.

Para nuestro ejemplo, podemos hacer lo siguiente:

Fíjate que primero usamos la etiqueta function para indicar que vamos a escribir una función. Luego viene el nombre de la función concreta que estamos escribiendo. Para elegir el nombre de la función, hemos de intentar que este nombre ya sea indicativo de lo que la función va a hacer. En nuestro caso, notificar cuando se publica una entrada. De ahí que tengamos notify_on_post_published.

Como no vamos a liarnos a usar namespaces todavía, lo que tenemos que hacer para evitar que ese nombre de función escogido esté repetido es añadirle un prefijo. Nosotros hemos puesto nelio_, pero tú puedes poner el prefijo que quieras. Eso sí, que sea el mismo en todas tus funciones, así también te servirá para rápidamente identificar aquellas funciones que has desarrollado tú.

Después del nombre de la función tenemos la lista de parámetros entre paréntesis. En esta función nos van a pasar como parámetros el identificador de la entrada $ID y el objeto con los datos de la entrada en $post. Estos parámetros los utilizaremos luego en el cuerpo de la función.

Por último, delimitamos el cuerpo de la función entre llaves, o lo que es lo mismo, los caracteres de apertura y cierre { y }. Aunque no es obligatorio, nosotros nos hemos acostumbrado también a poner un comentario de cierre justo después de }, tal y como puedes ver en la línea 13. Esto nos sirve, en funciones algo más largas y complejas, a saber qué función (o bloque) está cerrando esa llave.

El cuerpo de la función

El cuerpo de la función está compuesto por instrucciones y va dentro de las llaves de apertura y cierre { y }. Veamos el cuerpo de la función, donde preparamos el email y lo enviamos:

Fíjate que las instrucciones terminan con el símbolo de punto y coma en PHP. Hay tres bloques de instrucciones, cada uno de ellos con un comentario inicial explicando lo que se va a hacer.

En el primer bloque metemos en la variable $message el contenido del email. En este contenido tenemos también el contenido de la entrada, que se obtiene a través de $post->post_content.

En el segundo bloque preparamos el asunto del email y lo metemos en la variable $subject. En el asunto también metemos el título de la entrada, que obtenemos a partir de $post->post_title.

Por último, hacemos uso de la función de WordPress wp_mail que sirve para enviar un email. Esta función se llama utilizando paréntesis y poniendo dentro los parámetros que queramos pasar. Tal y como la documentación indica, primero le pasamos el email del destinatario, luego el asunto y luego el mensaje. Esto lo hacemos pasando primero una cadena de texto con el email y luego las dos variables que hemos estado preparando en las instrucciones anteriores.

Aunque no lo he comentado, ten en cuenta que también hemos documentado los parámetros que nuestra función recibe dentro del bloque DocBlock (líneas 8 y 9). De esta forma, cualquiera entiende que un parámetro es el identificador de la entrada y el otro es un objeto de tipo WP_Post con los datos de la entrada.

Instrucciones para ejecutar una función en WordPress

Aunque hemos sido capaces de escribir una función bastante resultona, la verdad es que no se ejecutará nunca a no ser que hagamos algo más. Veamos ahora como conseguir que nuestro código se ejecute.

Conectando la función con WordPress

Para que nuestra función funcione (no me canso de hacer la broma), hemos de conectarla con un hook de WordPress. Los hooks son acciones o filtros que WordPress ejecuta en un momento dado. Te puedes conectar a ellos para que cuando WordPress los ejecute, tu función se ejecute en ese mismo momento.

Nuestra función envía un email cuando una entrada se publica. Por tanto, tendremos que buscar en WordPress si hay algún hook al que conectarnos que se ejecute cuando se publica una entrada. Y sí, lo hay. Se trata del hook cuyo nombre es publish_post que tienes documentado aquí.

Para conectarnos a este hook hacemos lo siguiente:

Como ves, el código es el mismo de antes pero ahora en la línea 25 hemos añadido la función add_action que se encarga de conectar nuestra función nelio_notify_on_post_published con el hook publish_post.

Siempre se utiliza add_action o add_filter para conectar con hooks de tipo acción o filtro (estos últimos reciben un parámetro y lo devuelven modificado). Ya te hablé hace tiempo de los hooks de WordPress aquí.

Los dos últimos parámetros de add_action indican la prioridad de ejecución de nuestra función (el valor por defecto es 10) y el número de parámetros que hay que pasarle a la función conectada. En el caso del hook publish_post, se pasan dos parámetros; como nuestra función usa el segundo parámetro del hook, tenemos que pasarle los dos parámetros.

Y ya está. Si hacemos esto y vamos al editor de entradas y publicamos una nueva, enviaremos un email a la dirección indicada en nuestra función. Te animo a que lo pruebes e intentes modificar el contenido del email con más información, a modo de práctica.

Saber programar funciones es clave para convertirte en desarrollador de WordPress

Entender cómo funcionan las funciones (valga la redundancia) en WordPress es algo primordial para dar el salto al desarrollo de verdad con WordPress. Filtros y acciones son la herramienta más importante que WordPress proporciona para extender las funcionalidades de la plataforma.

Si has seguido paso a paso todo lo que hemos explicado hoy aquí y lo has entendido, tienes mucho ganado de cara a aumentar tus habilidades con WordPress. Te queda todavía un largo camino por delante, pero seguro que ahora todo es más sencillo.

Hay mil opciones para ganarse la vida con WordPress sin escribir ni una línea de código. ¿Crees que vale la pena aprender a desarrollar en WordPress? Yo creo que sí. Recuerda que puedes dejarme un comentario aquí abajo dándome tu opinión al respecto.

Imagen destacada de Patryk Grądys en Unsplash.

Deja un comentario

No publicaremos tu correo electrónico. Los campos obligatorios están marcados con: •

He leído y acepto la Política de privacidad de Nelio Software

Al marcar la casilla de aceptación estás dando tu legítimo consentimiento para que tu información personal se almacene en SiteGround y sea usada por Nelio Software con el propósito único de publicar aquí este comentario. Contáctanos para corregir, limitar, eliminar o acceder a tu información.