URL bonita con add_query_var

4

Estoy tratando de agregar una 'sub publicación' a cada publicación en mi sitio, por ejemplo,

site.com/product-one/changelog site.com/product-two/changelog site.com/product-three/changelog

Este es el código que estoy usando cajeros automáticos, que encontré aquí en alguna parte:

global $wp,$wp_rewrite;
$wp->add_query_var('sub-page');
$wp_rewrite->add_rule('([^/]+)/(changelog)','index.php?pagename=$matches[1]&sub-page=$matches[2]', 'top');
$wp_rewrite->flush_rules(false);  // This should really be done in a plugin activation

Esto funciona bien si navego a site.com/product-one?sub-page=changelog pero si goto site.com/product-one/changelog simplemente me redirecciono a site.com/product-one

Así que deshabilité la redirección canónica como prueba usando:

remove_filter('template_redirect', 'redirect_canonical'); 

site.com/product-one/changelog luego no redirecciona pero sí devuelve un 404 y site.com/product-one?sub-page=changelog sigue funcionando.

¿Hay algo que pueda cambiar con mi reescritura para que esto funcione?

Nota: Sé que podría hacer esto fácilmente con los tipos de publicaciones personalizadas y empecé a recorrer esa ruta, pero como el sitio ya usa la estructura% postname% permalink, no podría tener la costumbre. el tipo de publicación tiene esa estructura, así como las páginas de los sitios.

    
pregunta Adam Dempsey 22.10.2011 - 16:47

1 respuesta

6
add_rewrite_endpoint( 'changelog', EP_ROOT ); 

Agregará el punto final, changelog , que luego puede verificar en template_redirect hook.

En la coincidencia, la matriz de las variables de consulta ( $wp_query->query ) debe contener la clave changelog que contiene lo que viene después del / en valor. Por lo tanto, para la URL example.com/product1/changelog/5 , tendría una variable de consulta llamada changelog con el valor 5 .

Si no hay nada después del punto final, la variable estará presente, pero contendrá una cadena vacía. Tenga en cuenta que get_query_var() no funcionará para tal uso ya que está programado para devolver una cadena vacía si no se ha establecido la var. De consulta.

Puede ser suficiente con simplemente verificar si una variable está presente y, de ser así, modificar las variables de consulta en los enlaces de consulta (como pre_get_posts ) y cargar su propia sub publicación con la plantilla de registro de cambios.

También es posible que desee experimentar con diferentes máscaras de punto final de permalink, por ejemplo. EP_PAGES

Referencias:

respondido por el Tom J Nowell 26.10.2011 - 00:31

Lea otras preguntas en las etiquetas