A veces nos puede hacer falta ejecutar una determinada acción asociada a una URL en nuestro WordPress. Imaginemos que necesitamos tener una URL de este estilo

https://www.misitioweb.com/accion/?parametro=miparametro1
para por ejemplo actualizar ciertos elementos de la base de datos, enviar un email, mostrar cierta información, descargar un documento, etc. Si estamos utilizando un tema determinado una posible solución sería crear una página con las herramientas de backend de creación de páginas de WordPress. Lo que haríamos seria crear esta página con el slug https://www.misitioweb.com/accion y asociarle una plantilla de WordPress en el siguiente widget de la zona de administración Widget asociar plantillas de WordPress Recordemos que para hacer una plantilla simplemente tenemos que crear un archivo php e indicar en la cabecera del mismo el nombre de la plantilla junto con el texto que lo identifica como una plantilla “Template Name”. Este archivo php lo debemos guardar en la carpeta de nuestro tema o mejor en nuestro tema hijo. Algo similar a lo que ponemos aquí:

Este “Nombre_plantilla” será el que tenemos que escoger en la lista desplegable “Plantilla” que mostrábamos en el widget anterior. De esta forma ya estaría solucionado el problema que comentábamos al principio. Al cargar la URL

https://www.misitioweb.com/accion/?parametro=miparametro1
se ejecutaría el código y la acción que tengamos definida en nuestro archivo php.

Comentar que pongo un solo parámetro en la URL pero podrían indicarse varios o ninguno, en este caso lo importante es la “acción”. Hasta aquí nada nuevo. El problema me surgió cuando quería replicar este comportamiento en un plugin que estaba desarrollando en WordPress y quería ubicar este archivo php en las propias carpetas del plugin.

La idea era tener todo encapsulado en el plugin de forma que el código no estuviera repartido en el propio tema que estaba usando, lo cual quedaba un poco feo. En este caso no podía usar la misma estrategia o por lo menos de forma idéntica. Los templates de WordPress deben estar ubicados en la carpeta de nuestro tema principal o tema hijo, así que si lo ponía en la carpeta del plugin no me iba a funcionar.

Después de bucear por Internet y leer un montón de documentación, encontré una solución usando los filtros de WordPress. No se si será la mejor pero me pareció adecuada para lo que quería y me permitía tener separado el código del plugin del código del tema.

La idea era usar el filtro  Page_template que permite cargar un template personalizado para una página determinada. Con esto podía indicarle a WordPress que al usar esa página

https://www.misitioweb.com/accion
cargara el template que yo quisiera y en la ubicación que yo quisiera que era lo importante.

Además, el código de este filtro lo incluía en el archivo principal de mi plugin con lo que no tenía que tocar el archivo functions.php del tema principal. En este caso el código que he incluído en mi archivo principal del plugin es el siguiente:

Vamos a desgranar este código. Primero compruebo si la página de la que vengo es la correcta y tiene ese slug. Hay que sustituir “acción” por el nombre de la página que corresponda y que he creado previamente. Aquí hay que indicar que, en este caso del plugin, al igual que explique para el caso normal, hay que crear en mi WordPress una página vacía con el nombre/slug “acción” para poder usar esa URL en la llamada y que wordpress la reconozca. Sin esto no va a funcionar.

Una vez que hemos comprobado que es la página correcta, obtenemos la ruta a mi supuesto template en el directorio del plugin. Digamos que estoy sustituyendo el template por defecto de la página del tema por el archivo php que me interesa ejecutar en la carpeta de mi plugin. Con esto ya estaría listo.  Bueno, espero que os sirva de ayuda y si encontráis alguna forma mejor de hacerlo estaré encantado de conocerla.