Múltiples taxonomías en URL
¿Cómo se añaden múltiples taxonomías a la URL que tiene lo siguiente:
- Tipo de publicación: productos
- Taxonomía: product_type
- Taxonomía: marca_producto
Agregar un nuevo producto y seleccionar el tipo y la marca de este producto:
Al agregar un nuevo producto , hay dos cuadros de taxonomía (product_type y product_brand). Llamemos a esta nueva publicación Probar producto 1 . Lo primero que queremos hacer es marcar qué tipo de producto estoy tratando, digamos teléfonos celulares . A continuación, quiero marcar a qué marca pertenece el producto, digamos samsung.
Ahora " Test Product 1 " está asociado con el tipo "teléfonos celulares" y la marca "samsung" .
El resultado final deseado es:
/ productos
»Ver todas las publicaciones personalizadas/ productos / celulares
»Ver todas las publicaciones personalizadas con la taxonomía de teléfonos celulares/ product / cell-phones / samsung /
»Ver todas las publicaciones personalizadas donde la taxonomía es celulares y samsung/ productos / teléfonos celulares / samsung / test-product-1
»Ver el producto (publicación personalizada única)
La pregunta
¿Cómo haría esto posible? Mi pensamiento inicial fue usar una taxonomía, tener "teléfonos celulares" como el término principal de "samsung" . En realidad, agregar la taxonomía y sus términos no fue tan difícil. Pero condujo a muchos otros problemas, algunos bien conocidos, otros no tanto. De todos modos, no funciona así, ya que da 404 problemas y WP no permitirá ciertas cosas.
WP.org »plantilla-archivo-taxonomía
Esto me llevó a repensar la estructura, tener que abandonar las taxonomías y sus términos y pensé; ¿por qué no crear una segunda taxonomía, asociar el tipo de publicación y agregarla a la url?
Buena pregunta de hecho, pero ¿cómo?
Respuestas:
Esto es ciertamente posible utilizando algunas reglas de reescritura propias hasta cierto punto. La API WP_Rewrite expone funciones que le permiten agregar reglas de reescritura (o 'mapas') para convertir una solicitud en una consulta.
Hay requisitos previos para escribir buenas reglas de reescritura, y la más importante es la comprensión básica de la expresión regular. El motor de reescritura de WordPress utiliza expresiones regulares para traducir partes de una URL a consultas para obtener publicaciones.
Este es un breve y buen tutorial sobre PHP PCRE (expresiones regulares compatibles con Perl).
Entonces, ha agregado dos taxonomías, supongamos que sus nombres son:
Podemos usar esto en consultas de esta manera:
La consulta sería
?product_type=cell-phones&product_brand=samsung
. Si escribe eso como su consulta, obtendrá una lista de teléfonos Samsung. Para reescribir/cell-phones/samsung
en esa consulta, se debe agregar una regla de reescritura.add_rewrite_rule()
Hará esto por ti. Aquí hay un ejemplo de cómo se vería su regla de reescritura para el caso anterior:Necesitaras
flush_rewrite_rules()
tan pronto como haya agregado la regla de reescritura para guardarla en la base de datos. Esto se hace solo una vez, no es necesario hacer esto con cada solicitud, una vez que se vacía una regla, está allí. Para eliminarlo, simplemente enjuague sin la regla de reescritura agregada.Si desea agregar paginación, puede hacerlo haciendo algo como:
fuente
El final resulto
Esto es lo que se me ocurrió usando parcialmente partes de todas las respuestas que obtuve:
Algunos pensamientos:
Esto funciona Aunque está "obligado" a asignar ambas taxonomías a cada publicación o la URL tendrá un final
'/'
»'/products/taxonomy//postname'
. Como voy a asignar ambas taxonomías a todos mis procuts, teniendo un tipo y una marca, este código parece estar funcionando para mis necesidades. Si alguien tiene alguna sugerencia o mejora, ¡no dude en responder!fuente
flush_rewrite_rules()
eninit
? no lo hagas. básicamente está restableciendo sus reglas de reescritura con cada carga de página.Comprueba de esta manera, todavía tiene algunos errores con el archivo de la marca
http://pastebin.com/t8SxbDJy
}
fuente
Si bien no es su estructura de URL deseada exacta, puede obtener:
sin tener que especificar reglas de reescritura personalizadas.
Sin embargo, requiere que registres tus taxonomías y tipos de publicaciones personalizadas en un orden particular. El truco consiste en registrar cualquier taxonomía donde la babosa comienza con la babosa de su tipo de publicación antes de registrar ese tipo de publicación personalizada. Por ejemplo, suponga las siguientes babosas:
Luego puede registrarlos en este orden:
Si absolutamente tiene que tener una URL como:
Entonces necesitaría una regla de reescritura similar a esta:
ACTUALIZAR /programming/3861291/multiple-custom-permalink-structures-in-wordpress
Así es como redefine correctamente la URL de publicación única.
Establezca re-write en false para el tipo de publicación personalizada. (Deje el archivo como está) y luego, después de registrar las taxonomías y publicaciones, también registre las siguientes reglas de reescritura.
Luego filtre post_type_link para crear la estructura de URL deseada, permitiendo valores de taxonomía no establecidos. Modificando el código de la publicación vinculada, tendría:
Ahora solo necesito descubrir cómo volver a escribir la url de taxonomía de marca sin la etiqueta de marca líder, y debería coincidir exactamente con la URL deseada.
fuente