Cum se transmit parametrii URL pentru interogări avansate de taxonomie cu termeni multipli pentru o taxonomie personalizată
Acest răspuns oferă codul pentru o interogare care returnează o potrivire OR pentru un termen taxonomic:
global $query_string; $args['tax_query'] = array( array( 'taxonomy' => 'status' ,'terms' => array( 'disponibil', 'in_asteptare' ) // schimbă în "vandut" pentru a 2-a interogare ,'field' => 'slug' ), );
Aș dori ca template-ul meu de taxonomie să preia valorile termenilor pentru array ( ,'terms' => array( 'disponibil', 'in_asteptare' ) ) din URL, la fel ca pentru termenul singular.
Scopul este de a permite termenilor taxonomici să se schimbe în timp, fără a fi nevoie să codăm template-uri de pagină pentru combinații particulare de interes, așa că, dacă există o modalitate mai bună, vă rog să o sugerați.
Mulțumită acestei postări am permalinkuri care se mapează la fișierele template astfel:
example.com/cptslugs se mapează la template-ul meu archive-cptname.php example.com/cptslug/cpt-post se mapează la template-ul meu single-cptname.php example.com/cptslugs/ctxslug/term se mapează la template-ul meu taxonomy-ctxname.php
Aș dori să am ceva de genul:
example.com/cptslugs/ctxslug/term1/term2/
să se mapeze la template-ul meu taxonomy-ctxname.php astfel încât get_query_var( 'term' ) să returneze un array de termeni (term1,term2) din url.
dar dacă aș putea obține
example.com/cptslugs/ctxslug/?terms=term1,term2
să se mapeze la template-ul meu taxonomy-ctxname.php astfel încât get_query_var( 'term' ) să returneze un array de termeni (term1,term2) din url, probabil printr-o regulă de rescriere și un filtru, ar fi ok și așa.
Dar oricum, ideea este că fișierul template ar trebui să funcționeze, indiferent dacă i se transmite un termen sau un array de termeni.
ACTUALIZARE
Ok - @scribu vine în ajutor! -- poate. Am continuat să caut și asta am găsit. Credeam că am rezolvat totul, dar nu reușesc să-l fac să funcționeze.
?tax1=term1,term2&tax2=term2+term3
se mapează la:
query_posts( array( 'tax1' => 'term1,term2', 'tax2' => 'term3+term4' ) );
care se mapează mai departe la:
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
afișează template-ul paginii principale. Revizuire: afișează taxonomy-ctxname.php când scrii ctxname corect. Ce surpriză!
example.com/?cptslug/ctxslug=term1,term2
(taxonomia este înregistrată cu un slug de cptslug/ctxslug) de asemenea afișează template-ul paginii principale.
example.com/cptslug/?ctxslug=term1+term2
afișează template-ul archive-ctpname.php.
Cum obțin un URL care să afișeze template-ul taxonomy-ctxname.php sau taxonomy.php?
Apoi, odată ce am rezolvat asta - sugestiile pentru URL-uri frumoase sunt binevenite dar nu absolut necesare.
A DOUA ACTUALIZARE
example.com/?ctxname=term1,term2
și
example.com/ctpslugs/ctxslug/term1,term2/
Ambele afișează taxonomy-ctxname.php după cum se dorește. Vezi detaliile în răspunsul meu, postat mai jos.
După ce am adăugat
print_r($wp_query);
în template-ul meu și am analizat rezultatele, am descoperit formate de URL-uri care funcționează. În întrebarea mea, am menționat că următorul format nu funcționează - de fapt, funcționează - dacă scrii corect numele taxonomiei personalizate.
example.com/?ctxname=term1+term2
URL-urile elegante cu operatorii '+' și ',' (indicând AND și OR respectiv) sunt recunoscute doar atunci când nu sunt codate în URL.
example.com/cptslugs/ctxslug/term1,term2/
produce următorul obiect 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 )
În timp ce
example.com/cptslugs/ctxslug/term1+term2/
produce următorul obiect 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.S.: Conform acestui articol: caracterele '+' și ',' sunt 'Caractere Rezervate' și pot fi folosite în calea, parametrii și fragmentul unui URI, dar nu pot apărea în alte părți ale unui URI. Cred că este în regulă până la urmă. Totuși, pare puțin 'greșit' cumva.
