Crear rutas dinámicas con plantillas personalizadas en WordPress

Aprende cómo usar rutas dinámicas para llamar archivos específicos de forma fácil en WordPress sin usar conversiones a páginas internas.

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.

¿Cuál es tu reacción?
+1
0
+1
0
+1
0
+1
0
+1
1
Total
0
Shares
Publicación anterior

Obtener las etiquetas (tags) de una publicación (post) en WordPress

Siguiente Publicación

WhatsApp estrena un directorio de negocios

Publicaciones Relacionadas