Estoy tratando de add_rewrite_rule
trabajar para extraer un parámetro de la URL y pasarlo a la solicitud. He visto varias publicaciones sobre esto, pero parece que no funciona.
Si una url comienza con una cadena determinada, me gustaría eliminarla de la url y pasarla como parámetros de consulta.
Ejemplo de URL de solicitud:
http://domain.com/foo/my_page
Esto se transformaría en
http://domain.com/my_page?param=foo
Si 'foo' no está presente, debería pasar como una solicitud normal. Esta lógica debería aplicarse a cualquier url de página o url de tipo de publicación personalizada en mi sitio (básicamente foo / *). Pensando que actuaría como un paso a través, si la url tiene 'foo', elimínelo y luego simplemente pase a Wordpress a lo normal.
Ya tengo 'param' como query_vars permitido.
En total, necesitaría trabajar para lo siguiente:
- / foo / my_page (Página)
- / foo / my_folder / my_page (Subpágina)
- / foo / example_type (Archivo de publicaciones personalizadas)
- / foo / example_type / example_post (Publicación personalizada individual)
fuente
page
tipo de publicación o cualquier página? ¿Qué pasa con las páginas padre / hijo en jerarquía?Respuestas:
Una regla básica que funcionaría para su ejemplo:
Esto toma lo que viene después
foo/
y lo establece comopagename
para la consulta, y luegoparam
obtiene el valor estáticofoo
. Si necesita diferentes patrones de URL, necesitará reglas adicionales para cada patrón único. Consulte losWP_Query
documentos para conocer los diversos valores de consulta que se pueden establecer dentro de las reglas de reescritura. No olvides limpiar las reglas de reescritura después de agregar nuevas. Esto se puede hacer visitando la página Configuración de enlaces permanentes.Ahora visitando su URL de ejemplo:
cargará la página correcta, pero no se comportará exactamente como visitar:
porque cuando se utilizan reescrituras internas,
param
se establece dentro del$wp_query
objeto de consulta, no en el$_GET
superglobal. Si necesita trabajar con un código que busca un valor$_GET
, necesitará un paso adicional para establecer ese valor:Otro método a considerar es usar puntos finales, por
/foo/
lo que sería al final de las URL en lugar de como un prefijo. La ventaja de esto es que la APIadd_rewrite_endpoint
simplifica la adición de todas las reglas que necesita, incluida la habilitación de la paginación.fuente
Ok, obtuve ejemplos de trabajo para los 3 tipos de solicitudes. Tomó un montón de experimentar y perder el tiempo para que funcionen. Supongo que Milo es bueno para incitar a las personas a responder sus propias preguntas.
Después de innumerables cambios y de actualizar los enlaces permanentes, me di cuenta de que era mucho más fácil averiguar las direcciones URL fuera de add_rewrite_url y, una vez que funcionaban, definía la reescritura. Ejemplo de ser
index.php?param=foo&post_type=example_type
.Otra cosa obvia, pero agregarlo aquí para que pueda ayudar a alguien más. Debe definir el tipo de publicación personalizada add_rewrite_rule rules ANTES de definir sus reglas de comodín de página / subpágina. Perdí bastante tiempo con eso y creo que es lo principal que me hacía no entender por qué las reglas no funcionaban.
Aquí están las 3 reglas que funcionan en todas mis necesidades. La regla Página / Subpágina se combinó en una sola.
Además, lo que he hecho es configurar un bucle para agregar múltiples reglas de tipo de publicación personalizada. Recuerde, debe definir el tipo de publicación personalizada add_rewrite_rule rules ANTES de definir sus reglas comodín de página / subpágina.
El analizador de reescritura que Milo transmitió fue muy útil al tratar de comprender mejor cómo Wordpress consulta las páginas / publicaciones.
fuente