Página de plantilla de página personalizada basada en la reescritura de URL

¿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..


Objetivo:

  1. Agregue una regla de reescritura en un tipo de mensaje personalizado, enlace permanente
  2. Use una plantilla de página basada en la regla de reescritura

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.


1. Registrar URL personalizada

 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.


2. Registrar Vars 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.


3. Establecer la plantilla

 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?

Nota: En la sección de configuración de la plantilla de página, estamos usando funciones anónimas de PHP. Por lo tanto, este código necesitará un soporte mínimo de PHP 5.3.0 o puede usar los filtros de la forma anterior. Una cosa que debe recordar al usar funciones anónimas es que no puede anular el registro de un filtro o acción como lo haría normalmente. Pero es una forma fácil de vincular una acción / filtro sin dar un nombre a la función.