Cómo pasar parámetros URL para consultas avanzadas de taxonomía con múltiples términos para una taxonomía personalizada
Esta respuesta proporciona el código para una consulta que devuelve una coincidencia OR en un término de taxonomía:
global $query_string;
$args['tax_query'] = array(
array(
'taxonomy' => 'status'
,'terms' => array( 'disponible', 'pendiente' ) // cambiar a "vendido" para la segunda consulta
,'field' => 'slug'
),
);
Me gustaría que mi plantilla de taxonomía recupere los valores de términos para el array ( ,'terms' => array( 'disponible', 'pendiente' ) ) desde la URL, igual que para un término único.
El objetivo es permitir que los términos de taxonomía cambien con el tiempo, sin tener que codificar plantillas de página para combinaciones particulares de interés, por lo que si hay una mejor manera, por favor sugiéranla.
Gracias a esta publicación tengo enlaces permanentes que mapean a archivos de plantillas de la siguiente manera:
example.com/cptslugs mapea a mi plantilla archive-cptname.php example.com/cptslug/cpt-post mapea a mi plantilla single-cptname.php example.com/cptslugs/ctxslug/term mapea a mi plantilla taxonomy-ctxname.php
Me gustaría tener algo como:
example.com/cptslugs/ctxslug/term1/term2/
que mapee a mi plantilla taxonomy-ctxname.php de manera que get_query_var( 'term' ) devuelva un array de términos (term1,term2) desde la url.
pero si pudiera obtener
example.com/cptslugs/ctxslug/?terms=term1,term2
para mapear a mi plantilla taxonomy-ctxname.php de manera que get_query_var( 'term' ) devuelva un array de términos (term1,term2) desde la url, tal vez a través de una regla de reescritura y un filtro, eso también estaría bien.
Pero de cualquier manera, la idea es que el archivo de plantilla debería funcionar, ya sea que se le pase un término o un array de términos.
ACTUALIZACIÓN
Ok - @scribu al rescate! -- tal vez. Seguí buscando, y esto es lo que encontré. Pensé que lo tenía todo resuelto, pero no puedo hacer que funcione.
?tax1=term1,term2&tax2=term2+term3
mapea a:
query_posts( array(
'tax1' => 'term1,term2',
'tax2' => 'term3+term4'
) );
que además mapea a:
query_posts( array(
'tax_query' => array(
array(
'taxonomy' => 'tax1',
'field' => 'slug',
'terms' => array('term1', 'term2'),
'operator' => 'OR'
),
array(
'taxonomy' => 'tax2',
'field' => 'slug',
'terms' => array('term3', 'term4'),
'operator' => 'AND'
),
) );
example.com/?ctxname=term1,term2
renderiza la plantilla de página principal. Revisión: renderiza taxonomy-ctxname.php cuando escribes ctxname correctamente. ¡Imagínate!
example.com/?cptslug/ctxslug=term1,term2
(la taxonomía está registrada con un slug de cptslug/ctxslug) también renderiza la plantilla de página principal.
example.com/cptslug/?ctxslug=term1+term2
renderiza la plantilla archive-ctpname.php.
¿Cómo obtengo una URL que renderice la plantilla taxonomy-ctxname.php o la plantilla taxonomy.php?
Luego, una vez que lo tenga dominado - las sugerencias para URLs bonitas son bienvenidas pero no absolutamente necesarias.
ACTUALIZACIÓN DOS
example.com/?ctxname=term1,term2
y
example.com/ctpslugs/ctxslug/term1,term2/
Ambos renderizan taxonomy-ctxname.php como se desea. Ver detalles en mi respuesta, publicada abajo.
Después de agregar
print_r($wp_query);
a mi plantilla y examinar los resultados, he descubierto formatos de URL que funcionan. Escribí en mi pregunta que el siguiente formato no funciona; de hecho, sí funciona si escribes correctamente el nombre de tu taxonomía personalizada.
example.com/?ctxname=term1+term2
Las URLs bonitas con los operadores '+' y ',' (que indican AND y OR respectivamente) solo son reconocidas cuando no están codificadas en la URL.
example.com/cptslugs/ctxslug/term1,term2/
produce el siguiente objeto WP_Tax_Query:
[tax_query] => WP_Tax_Query Object
(
[queries] => Array
(
[0] => Array
(
[taxonomy] => announcements_cats
[terms] => Array
(
[0] => term1
[1] => term2
)
[include_children] => 1
[field] => slug
[operator] => IN
)
[1] => Array
(
[taxonomy] => category
[terms] => Array
(
[0] => 1
)
[include_children] =>
[field] => term_id
[operator] => NOT IN
)
)
[relation] => AND
)
Mientras que
example.com/cptslugs/ctxslug/term1+term2/
produce el siguiente objeto WP_Tax_Query:
[tax_query] => WP_Tax_Query Object
(
[queries] => Array
(
[0] => Array
(
[taxonomy] => ctxname
[terms] => Array
(
[0] => term1
)
[include_children] => 1
[field] => slug
[operator] => IN
)
[1] => Array
(
[taxonomy] => ctxname
[terms] => Array
(
[0] => term2
)
[include_children] => 1
[field] => slug
[operator] => IN
)
[2] => Array
(
[taxonomy] => category
[terms] => Array
(
[0] => 1
)
[include_children] =>
[field] => term_id
[operator] => NOT IN
)
)
[relation] => AND
)
P.D.: Según esto, los caracteres '+' y ',' son 'Caracteres Reservados' y pueden usarse en la ruta, parámetros y fragmento de una URI, pero no deben aparecer en otras partes de una URI. Supongo que está bien después de todo. Aunque de alguna manera parece "incorrecto".
