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
1 2 3 4 |
<?php /* Template Name: Nombre_plantilla */ |
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
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
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:
1 2 3 4 5 6 7 8 9 |
add_filter( 'page_template', 'mi_funcion' ); function mi_funcion( $page_template ) { if ( is_page( 'accion' ) ) { $page_template = plugin_dir_path( __FILE__ ) . "accion_file.php"; } return $page_template; } |
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.