¿Alguna vez te has preguntado sobre las reescrituras personalizadas de WordPress? Aquí estaba tratando con un problema interesante. Quería agregar una regla de reescritura en un enlace permanente y quería usar una plantilla personalizada para esa regla de reescritura. Sin embargo, esta no es una publicación exhaustiva sobre cómo reescribir las reglas, hay un muy buen tutorial detallado sobre esto si desea saber más detalles..
Aquí tenemos un película
tipo de mensaje. La estructura del enlace permanente es película / nombre de la película
. Quiero anexar un fotos
y videos
punto final a esa url, por lo que la estructura será película / nombre de la película / fotos
y movie / movie-name / videos
. Como puede adivinar, quiero mostrar todas las fotos y videos en una página separada de esa película y quiero usar una plantilla de página separada para lograr esto.
function prefix_movie_rewrite_rule () add_rewrite_rule ('movie / ([^ /] +) / photos', 'index.php? movie = $ matches [1] & photos = yes', 'top'); add_rewrite_rule ('movie / ([^ /] +) / videos', 'index.php? movie = $ coincide [1] & videos = yes', 'top'); add_action ('init', 'prefix_movie_rewrite_rule');
Por esto add_rewrite_rule
Para ello, estamos agregando dos reglas de reescritura personalizadas a la URL y configurando dos variables de consulta a la URL. No estoy usando add_rewrite_endpoint
porque no quiero agregar este punto final a cada enlace permanente que tengo. Pero al solo agregar esta regla de reescritura, no funcionarán y WordPress las rechazará porque no reconoce las vars de consulta que agregamos a través de nuestra función de regla de reescritura. Tenemos que decirle a WordPress que sea modesto en estas variables de consulta.
function prefix_register_query_var ($ vars) $ vars [] = 'photos'; $ vars [] = 'videos'; devuelve $ vars; add_filter ('query_vars', 'prefix_register_query_var');
Ahora, como hemos agregado esas vars de consulta a WordPress, las reconocerá y podemos aprovecharlas. Pero si vas a la URL película / nombre de la película / fotos
, todavía verás que tu single-movie.php o single.php Las plantillas están cuidando estas URLs. Si ve un error 404 en nuestra URL personalizada, no se preocupe, solo guarde sus enlaces permanentes nuevamente.
function prefix_url_rewrite_templates () if (get_query_var ('photos') && is_singular ('movie')) add_filter ('template_include', function () return get_template_directory (). '/single-movie-image.php';)) ; if (get_query_var ('videos') && is_singular ('movie')) add_filter ('template_include', function () return get_template_directory (). '/single-movie-video.php';)); add_action ('template_redirect', 'prefix_url_rewrite_templates');
Aquí estamos diciendo que, si hay una consulta var fotos
o videos
y es un single película
página, estamos configurando la plantilla como single-movie-image.php y single-movie-video.php respectivamente.
Asi que, single-movie-image.php
es responsable de película / nombre de la película / fotos
consulta y single-movie-video.php
es responsable de movie / movie-name / videos
consulta. Simple eh?