Hittills i denna serie har du lärt dig hur WP_Query
är strukturerad och vad dess egenskaper och metoder är. Nu tittar vi på de olika argumenten du kan använda med WP_Query
och hur du kodar dem.
WP_Query
har ett stort antal möjliga argument, vilket gör den extremt flexibel. Som du kan använda den för att fråga nästan vad som helst i din wp_posts
tabell, det har argument för varje permutation av fråga du kanske vill köra på ditt innehåll.
I denna handledning ser jag på argument för att fråga om taxonomi villkor.
Innan vi börjar, låt oss få en snabb omgång om hur argument fungerar WP_Query
. När du kodar WP_Query
i dina teman eller plugins måste du inkludera fyra huvudelement:
om
och medan
taggar och återställer postdataI praktiken kommer det att se ut som följande:
have_posts ()) // Starta looping över sökresultatet. medan ($ query-> have_posts ()) $ query-> the_post (); // Innehållet i de efterfrågade postresultaten går här. // Återställ ursprungliga postdata. wp_reset_postdata (); ?>
Argumenten är vad som säger WordPress vilka data som hämtas från databasen och det är de som jag täcker här. Så allt vi fokuserar på här är den första delen av koden:
$ args = array (// Arguments for your query.);
Som du kan se finns argumenten i en array. Du lär dig hur du kodar dem när du arbetar genom den här handledningen.
Det finns ett visst sätt att koda argumenten i arrayen, vilket är enligt följande:
$ args = array ('parameter1' => 'värde', 'parameter2' => 'värde', 'parameter3' => 'värde');
Du måste bifoga parametrarna och deras värden i enskilda citattecken, använd =>
mellan dem och separera dem med ett komma. Om du får fel kan WordPress inte lägga till alla dina argument på frågan eller du kan få en vit skärm.
Att ställa in parametrar för taxonomi villkor är lite mer komplicerat än för kategorier och taggar eftersom du använder tax_query
. Inom det här argumentet skriver du en kapslad grupp av argument för att ange taxonomi och term med dessa parametrar:
taxonomi
(sträng): Taxonomi.fält
(sträng): Välj taxonomy term av ('term_id
(standard), 'namn'
eller 'snigel'
).villkor
(int / string / array): Taxonomy term (er).include_children
(boolean): Att inkludera barn för hierarkiska taxonomier eller ej. Standardvärden är sanna.operatör
(sträng): Operatör att testa. Möjliga värden är 'I'
(standard), 'INTE I'
, 'OCH'
.Det faktum att du har operatör
parameter betyder att du inte behöver välja bland en rad tillgängliga argument för att definiera om du inkluderar eller exkluderar termer (som du gör för taggar och kategorier), men använd tax_query
för allt taksonomi-relaterat istället.
Om du vill fråga om flera taxonomier kan du också använda relation
parametern före alla dina arrayer (en för varje taxonomi) med OCH
eller ELLER
för att ange om du vill hitta inlägg med alla villkoren eller någon av dem.
Detta förklaras lättast med några exempel.
Detta är det enklaste scenariot och innebär bara att använda en nestad array:
$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomi', 'field' => 'slug', 'terms' => 'my-term-slug' ;
Ovanstående frågor för inlägg med my-term-slug
termen i my-taxonomi
taxonomi. Observera att du också måste använda fält
parameter för att identifiera vilket fält du använder för att identifiera termen, om du inte använder termen ID som är standard. Om du vill använda termen ID skulle du använda något av följande:
$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => '11')));
Använda ID gör det svårare för dig att identifiera vad din fråga letar efter senare, men undviker eventuella problem om du tror att dina användare kan redigera termen sniglar.
Om du vill identifiera inlägg med en eller flera av en rad termer i samma taxonomi skriver du fortfarande en nestad array, men lägger till en rad termer.
Till exempel att fråga inlägg med några av en lista över termen ID från din taxonomi, använder du:
$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => array ('11', '12'))));
Men vad händer om du ville fråga inlägg med Allt av dessa villkor? Du måste använda operatör
parameter inuti din nestade array:
$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => array ('11 ', '12'), 'operator' => 'OCH') ));
Observera att det första exemplet faktiskt använder I
operatören för att hitta inlägg med någon av villkoren, men eftersom det här är standard behöver du inte ange det i dina argument.
Ett annat scenario är om du vill fråga efter inlägg som inte har någon av en rad termer i en taxonomi, vilket du gör så här:
$ args = array ('tax_query' => array (array ('taxonomy' => 'min taxonomi', 'terms' => array ('11', '12'), 'operator' => 'INTE IN' )));
Här har jag ersatt OCH
operatör med INTE I
, vilket betyder att WordPress hittar inlägg utan några av villkoren i arrayen.
Observera att om du föredrar att använda sniglar istället för termen ID, kan du göra det med någon av dessa scenarier. Det sista exemplet skulle se ut så här:
$ args = array ('tax_query' => array (array ('taxonomy' => 'min taxonomi', 'field' => 'slug', 'terms' => slug '),' operator '=>' INTE IN '))));
Ett annat scenario är om du vill fråga efter inlägg som har en term men inte en annan. Detta använder I
operatör (som du inte behöver inkludera som standard), med ett minustecken före ID-en för alla villkor som du vill utesluta:
$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => array ('11', '12 '))));
Dessa frågor inlägg med termen 11 men inte termen 12.
Om du vill arbeta med mer än en taxonomi måste du skapa mer än en grupp. Låt oss titta på det enklaste exemplet, för att fråga inlägg med en term från taxonomy1 och en term från taxonomy2:
$ args = array ('tax_query' => array ('relation' => 'OCH', array ('taxonomy' => 'taxonomy1', 'field' => 'slug', 'terms' => array -one '), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ',' terms '=> array (' slug-two '))));
Här har jag skrivit två nestade arrays: en för varje taxonomi, med samma argument som jag gjorde för exemplen med bara en taxonomi. Jag har föregått dessa med relation
argument. Du måste inkludera relation
argument för att berätta för WordPress om det letar efter alla eller några av de inlägg som utmatas av varje array. Detta fungerar som följer:
'relation' => 'OCH'
, WordPress hämtar de inlägg som anges i den första matrisen och den andra gruppen. Så i exemplet ovan, bara inlägg med både de slug-on
slug in taxonomy1
och den slug-två
slug in taxonomy2
kommer att frågas.'relation' => 'ELLER'
, WordPress hämtar inlägg utdata av den första matrisen eller den andra gruppen. Så i det här fallet får du inlägg med antingen de slug-on
slug eller the slug-två
slug (eller båda).Det här är koden du skulle använda om du letade efter inlägg med någon av de två sniglarna:
$ args = array ('tax_query' => array ('relation' => 'ELLER', array ('taxonomy' => 'taxonomy1', 'field' => 'slug', 'terms' => array -one '), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ',' terms '=> array (' slug-two '))));
Du kan också leta efter mer än en term i en given taxonomi genom att lägga till den i arrayen:
$ args = array ('tax_query' => array ('relation' => 'ELLER', array ('taxonomy' => 'taxonomy1', 'field' => 'slug', 'terms' => array -one '), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ',' terms '=> array ("slug-two", "slug-three"))));
Genom att kombinera relation
argument med kapslade frågor som också använder operatör
argument, du kan skapa ganska komplexa frågor. Argumenten nedan skulle fråga inlägg med en term från en taxonomi men utan en term från en annan taxonomi:
$ args = array ('tax_query' => array ('relation' => 'OCH', array ('taxonomy' => 'taxonomy1', 'field' => 'slug', 'terms' => array -one '),' operator '=>' INTE IN '), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ' ));
Observera att jag har använt 'relation' => 'OCH'
här: om jag använde ELLER
, det skulle fråga inlägg med slug-två
och inlägg utan slug-on
, snarare än inlägg som har slug-två
men inte slug-on
, vilket är vad jag letar efter.
Du kan tänkbart ta det här för att fråga din taxonomiens villkor men du ville: använda operatör
argument i både kapslade frågor eller lägga till en ytterligare inbäddad fråga för frågan i en annan taxonomi.
Du kanske undrar varför jag inte har inkluderat beskatta
argument, där du helt enkelt skriver ditt argument enligt följande:
$ args = array ('taxonomy1' => 'slug-one');
Du kan vara bekant med det här sättet att fråga taxonomier om du har gjort det tidigare, men det är nu avvecklat och du ska inte använda det. Så håll dig till 'Tax_query'
! Använder sig av tax_query
ger dig mycket mer flexibilitet ändå.
Fråga om taxonomier är lite mer komplicerat än kategorier och taggar, eftersom du behöver komma i kontakt med tax_query
argument.
Men som vi har sett är det här ett mycket kraftfullt argument som ger dig mycket utrymme och flexibilitet att fråga din databas på vilket sätt du vill.