web-dev-qa-db-fra.com

Passerelle des paramètres d'URL pour les requêtes de taxonomie avancée avec plusieurs termes pour une taxonomie personnalisée

Cette réponse fournit le code d'une requête renvoyant une correspondance OR sur un terme de taxonomie:

 global $ query_string; 
 $ args ['tax_query'] = array (
 array (
 'taxonomy' => 'status' 
, 'termes' => tableau ('disponible', 'en attente') // remplace par "vendu" pour la 2e requête 
, 'champ' => 'slug' 
), 
); 

J'aimerais que mon modèle de taxonomie récupère les valeurs de terme pour le tableau (, "terms" => array ("disponible", "en attente")) à partir de l'URL, de la même manière que pour le terme unique.

Le but est de permettre aux termes de taxonomie de changer avec le temps, sans avoir à coder de manière irréfutable les modèles de page pour des combinaisons d'intérêt particulières. Ainsi, s'il existe un meilleur moyen, suggérez-le.

Merci à cet article j’ai mis en correspondance permaliens des fichiers modèles comme suit:

 example.com/cptslugs est mappé sur mon modèle archive-cptname.php. 
 example.com/cptslug/cpt-post est mappé sur mon modèle single-cptname.php. 
 example.com/cptslugs/ctxslug/term correspond à mon modèle taxonomy-ctxname.php. 

J'aimerais avoir quelque chose comme:

example.com/cptslugs/ctxslug/term1/term2/

mappez vers mon modèle taxonomy-ctxname.php tel que get_query_var ('term') retourne un tableau de termes (term1, term2) à partir de l'URL.

mais si je pouvais obtenir

example.com/cptslugs/ctxslug/?terms=term1,term2

mapper vers mon modèle taxonomy-ctxname.php tel que get_query_var ('term') retourne un tableau de termes (term1, term2) à partir de l'URL, éventuellement via une règle de réécriture et un filtre, ce serait également correct.

Mais dans tous les cas, l’idée est que le fichier modèle fonctionne, qu’il soit passé par un terme ou par un tableau de termes.

UPDATE

Ok - @scribu à la rescousse! -- peut être. Gardé la recherche, et c'est ce que j'ai trouvé. Je pensais avoir tout compris, mais je n'arrive pas à le faire fonctionner.

? tax1 = terme1, terme2 & taxe2 = terme2 + terme3 

cartes à:

 query_posts (array (
 'tax1' => 'term1, term2', 
 'tax2' => 'term3 + term4' 
)); 

qui correspond à:

 query_posts (array (
 'tax_query' => array (
 array (
 'taxonomy' => 'tax1', 
 'field' => 'slug', 
 'terms' => array ('term1', 'term2'), 
 'operator' => 'OU' 
), 
 array (
 'taxonomy' => 'tax2', 
 'field' => 'slug', 
 'terms' => array ('terme3', 'terme4 '), 
' opérateur '=>' ET '
), 
)); 

example.com/?ctxname=term1,term2

rend le modèle de page de garde. Révision: il rend taxonomy-ctxname.php lorsque vous épelez correctement ctxname. Imager cela!

example.com/?cptslug/ctxslug=term1,term2

(la taxonomie est enregistrée avec un slug de cptslug/ctxslug) rend également le modèle de page de garde.

example.com/cptslug/?ctxslug=term1+term2

affiche le modèle archive-ctpname.php.

Comment obtenir une URL qui rend le modèle taxonomy-ctxname.php ou le modèle taxonomy.php?

Ensuite, une fois que j'ai compris cela - les suggestions pour de jolies URL sont les bienvenues mais pas absolument nécessaires.

UPDATE TWO

example.com/?ctxname=term1,term2

et

example.com/ctpslugs/ctxslug/term1,term2/

Les deux rendent taxonomy-ctxname.php comme vous le souhaitez. Voir les détails dans ma réponse, posté ci-dessous.

5
marfarma

Après avoir ajouté

 print_r ($ wp_query); 

à mon modèle et en examinant les résultats, j'ai découvert des formats d'URL qui fonctionnent. Dans ma question, j’écrivais que le format suivant ne fonctionnait pas - en fait, il le faisait si vous épeliez correctement votre nom de taxonomie personnalisé.

example.com/?ctxname=term1+term2

Les jolies URL avec les opérateurs '+' et ',' (indiquant respectivement AND et OR) ne sont reconnues que lorsque pas URL-encodé.

example.com/cptslugs/ctxslug/term1,term2/ 

produit l'objet WP_Tax_Query suivant

 [tax_query] => Objet WP_Tax_Query 
 (
 [requêtes] => Array 
 (
 [0] => Array 
 (
 [taxonomy] => annoncements_cats 
 [termes] => Tableau 
 (
 [0] => terme1 
 [1] = > terme2 
) 
 
 [include_children] => 1 
 [champ] => slug 
 [opérateur] => IN 
) 
 
 [1] => Tableau 
 (
 [Taxonomie] => catégorie 
 [Termes] => Tableau 
 (
 [0] => 1 
) 
 
 [include_children] => 
 [field] => term_id 
 [operator] => PAS IN 
) 
 
 ) 
 
 [relation] => ET 
) 

Tandis que

example.com/cptslugs/ctxslug/term1+term2/

produit l'objet WP_Tax_Query suivant

 [tax_query] => Objet WP_Tax_Query 
 (
 [requêtes] => Array 
 (
 [0] => Array 
 (
 [taxonomie] => ctxname 
 [termes] => Tableau 
 (
 [0] => terme1 
) 
 
 [include_children] => 1 
 [field] => limace 
 [opérateur] => IN 
) 
 
 [1] => Tableau 
 (
 [Taxonomie] => ctxname 
 [Termes] => Tableau 
 (
 [0] = > terme2 
) 
 
 [include_children] => 1 [.__ __.] [champ] => slug 
 [opérateur] => IN 
) 
 
 [2] => Tableau 
 (
 [taxonomie] => catégorie 
 [termes] => Tableau 
 (
 [0] => 1 
) 
 
 [include_children] => 
 [field] => term_id 
 [operator] => NOT IN 
) 
 
) 
 
 [relation] => ET 
) 

P.S .: Selon à ceci: le '+' et le ',' sont des 'Caractères Réservés' et peuvent être utilisés dans le chemin, les paramètres et le fragment d'un URI, mais peuvent ne pas apparaître dans les autres parties d'un URI. Je suppose que c'est bon après tout. Cela semble juste "faux" d'une certaine manière, cependant.

4
marfarma