Para crear rutas dinámicas que respondan a ciertas URLs, usaremos el archivo functions.php
en este vamos a crear una función que después vamos a pegar a un hook
:
function customRoutes()
{
global $wp;
global $wp_query;
$wp->parse_request();
$route = $wp->request;
if ($route) {
...
}
}
Vamos a ver esta base primero, llamamos el objeto $wp
y $wp_query
este realmente ya no se necesita pero es «para más placer y seguridad» 😉… después vamos a leer la petición en la ruta para acceder a esta y ver las secciones.
Lo siguiente será entonces, leer las secciones de la URI para dividirlas, revisar «cuál es la primer path, y de ahí irnos guiando, por ejemplo:
/hotel/nombre-de-un-hotel/seccion
Entonces, si «la ruta» incluye «hotel», y tiene una longitud de 3 entonces estamos donde queremos estar, y vamos a llamar a nuestro archivo de la plantilla específico para esta acción, quedando entonces nuestra función de la siguiente manera:
function customRoutes()
{
global $wp;
global $wp_query;
$wp->parse_request();
$route = $wp->request;
if ($route) {
$paths = explode('/', $route);
if (isset($paths[0]) && $paths[0] === 'hotel' && count($paths) === 3) {
$wp_query->is_404 = false;
$wp_query->is_page = true;
status_header('200');
do_action('template_redirect');
require_once(get_template_directory() . '/seccion.php');
exit;
}
}
}
En esta parte primero validamos que la sección de la ruta «/hotel» existe y es «hotel» para así asegurarnos que estamos donde queremos y que son «3 secciones» como se había comentado.
Después viene lo interesante, en algunas guías se comenta que hay que agregar la funcionalidad de avisarle a WP que nuestra sección es una página y que no es un 404, sin embargo parece que en versiones recientes (6+) esto ya no se necesita. Asimismo, también se habla de «regresar un header 200» para sobre-escribir cualquier otra cosa, pero parece que tampoco se necesita, esto por ello digo que lo agregamos «para más placer».
Pero aquí vienen 2 trucos:
El primero, si nosotros simplemente llamamos require_once(...)
e integramos nuestro archivo PHP y «terminamos la ejecución», WP va a retornarnos como si estuviéramos en un 404 a pesar de que ya le indicamos lo anterior (lo cual quizá funcionase en versiones anteriores(?)), pero aquí entra un trucazo, si le agregamos el hook template_redirect
para que lo re-ejecute, WP agrega una /
al final y por alguna razón al hacerlo deja de aparecer este 404 (no soy tan experto en WP así que si alguien sabe la respuesta coméntela).
Por último pues «terminamos la ejecución» con exit
y listo. Cargamos esta función en los hooks:
add_action('init', 'customRoutes');
Dentro de tu archivo, puedes agregar sin problemas tu get_header()
o get_footer()
y aparecerá correctamente la barra superior, si no agregamos el template_redirect
no aparece la barra de WP (por eso el trucazo, con el mero exit
lo cargaría el archivo pero no esa barra y eso es por ello lo más importante).
Si tienes dudas, coméntalas y no te olvides de seguir revisando el blog para más.