Programando mi primer plugin de WordPress

Madrugar. Sesión de yoga. Medi… No, meditación no. Mi familia aparece por la puerta de la cocina. Cambio de planes.

Una de las consecuencias del yoga, o tal vez del bienestar, o del bienestar al que contribuye el yoga…

En fin: la flexibilidad. El poder cambiar de planes rápidamente de buen humor. Eso es lo que he hecho hoy. Qué maravilla.

Ayer dediqué un par de horas a programar mi primer plugin de WordPress. De hecho, había hecho un intento antes. Se puede programar un plugin de WordPress con muy poco esfuerzo.

Sólo hacen falta las cabeceras. Se escribe, en forma de comentario con un formato determinado, la información mínima acerca del plugin: nombre del plugin, su slug, el nombre del autor, URLs… Al terminar tienes un plugin. Lo guardas en la ruta de plugins del servidor o de donde toque y te aparece en el menú de administración. Es un momento de satisfacción. El plugin no hace nada, pero está ahí, entre los otros, y puedes activarlo y desactivarlo. A veces la nada puede producir gran satisfacción.

A falta de una idea más apropiada, me puse manos a la obra con el plugin que muestra, para empezar al administrador, en cada post, una lista con los usuarios registrados que han pasado por ahí.

Empecé con fuegos artificiales, creando una base de plugin a partir de uno de estos boilerplates que hay por internet y que generan una compleja y completa estructura de subdirectorios y lo dejan todo preparado hasta para la internacionalización. Después, en un index.php que quedaba por ahí, metí el código que encontré. No hacía nada. Y ponte a depurar eso.

No tengo un depurador configurado. No he debuggeado un WordPress nunca. No tengo tiempo de aprender hoy. Borro todo y hago un plugin de un fichero. Sigue sin funcionar.

Vale, sigamos reduciendo el asunto a su mínima expresión.

Tiro de un hook para modificar el título. Lo modifica. Tenemos tracción. Con un punto de apoyo podemos empezar mover el mundo.

Es un momento de gran satisfacción, el de poder modificar, de alguna manera, este complejo sistema que es WordPress y que usamos aquí cada día. Un horizonte de posibilidades se abre ante nosotros.

Arriba, abajo. Esto no funciona. No funciona y no sé por qué. A investigar.

Por simplificarlo, me llevó un par de horas conseguir acceder al post_id, el identificador de un post en concreto. Por simplificar, estaba entrando usando el hook init. Es el gancho que permite engancharse a WordPress cuando ha terminado de inicializarse. El problema es que, a esas alturas, el post_id todavía no está disponible. Me llevó un buen rato descubrir eso.

Probé con template_redirect como gancho. Desconozco los detalles del funcionamiento, pero funcionó y me pude hacer con el id del post. Eso fue lo que más tiempo me llevó.

El código en el que me basé no funcionó en absoluto, así que opté por ir con mi planteamiento original: crear una tabla nueva que relaciona los posts con los usuarios. Cada vez que un usuario abra un post, se creará una entrada en la tabla que recoja qué post es y de qué usuario se trata. ¿Cómo se crea una tabla en WordPress?

No es tan difícil, y tampoco es difícil hacer que se cree cuando se activa el plugin por primera vez. Ahora, ¿cómo se inserta información en una tabla en WP? Tampoco es tan difícil. La mayor parte del trabajo ya está hecho y las funciones adecuadas están disponibles. Un par de pruebas y podemos comprobar que la información se guarda en la nueva tabla de la base de datos. ¡Menudo subidón!

Ahora, problema: se puede guardar la misma información varias veces si el usuario retorna varias veces al post. Esto genera entradas innecesarias en la tabla y nos las podemos ahorrar. ¿Cómo? Comprobando, antes de guardar, si la información ya está ahí.

Listo.

Ya sólo queda mostrar la lista de usuarios que han plantado su bandera en el post. Esa parte ya la tengo, de hecho, más o menos empezada.

Según lo que he encontrado, la manera ortodoxa de hacerlo es tomar the_content, una variable interna que contiene el texto del post, y reescribirla añadiendo el contenido que sea quiera añadir. Me parece una manera algo rara de afrontar eso, pero el caso es que ha funcionado. Me quedaría por investigar otros modos de hacer eso, pero ahora mismo tengo un bebé berreando a mi lado y me cuesta enfocarme.

Así que queda hacer una consulta a la base de datos pidiéndole todos los usuarios de la tabla usuarios-posts con el post_id que corresponda al post actual y que los devuelva ordenados alfabéticamente. Luego mostrarlos con el HTML correspondiente y un CSS apañao.

Contaría un poco más, pero me requieren mis responsabilidades paternales.

Si os interesan los detalles o alguna parte en concreto o ver el código o lo que sea, sólo tenéis que decirlo.

Comentarios

Una respuesta a «Programando mi primer plugin de WordPress»

  1. Avatar de Adrián
    Adrián

    No estoy metido en este asunto (programación para WordPress), pero ¿te has montado un github o similar? Puede servirte también a nivel de CV.

    ¡Salud!

Deja una respuesta