WP_Query-argumenten taxonomieën

Tot nu toe in deze serie, heb je geleerd hoe WP_Query is gestructureerd en wat zijn eigenschappen en methoden zijn. Nu kijken we naar de verschillende argumenten die u kunt gebruiken WP_Query en hoe je ze codeert.

WP_Query heeft een groot aantal mogelijke argumenten, waardoor het extreem flexibel is. Omdat je het kunt gebruiken om alles wat je in je bezit op te vragen wp_posts tabel, het heeft argumenten voor elke permutatie van de query die u misschien wilt uitvoeren op uw inhoud.

In deze zelfstudie zal ik kijken naar argumenten voor het zoeken naar taxonomietermen.

Een samenvatting van hoe argumenten werken in WP_Query

Laten we, voordat we beginnen, een korte samenvatting geven van de manier waarop argumenten werken WP_Query. Wanneer je codeert WP_Query in uw thema's of plug-ins moet u vier hoofdelementen opnemen:

  • de argumenten voor de query, met behulp van parameters die in deze zelfstudie worden behandeld
  • de vraag zelf
  • de lus
  • afwerken: sluiten als en terwijl tags en het resetten van postgegevens

In de praktijk zal dit er ongeveer zo uitzien:

have_posts ()) // Start het doorlopen van de queryresultaten. while ($ query-> have_posts ()) $ query-> the_post (); // Inhoud van de opgevraagde resultaten van de post ga hier naartoe.  // Oorspronkelijke berichtgegevens herstellen. wp_reset_postdata (); ?>

De argumenten zijn wat WordPress vertelt welke gegevens moeten worden opgehaald uit de database en dat zijn de argumenten die ik hier zal behandelen. Dus het enige waar we ons op concentreren is het eerste deel van de code:

$ args = array (// Argumenten voor uw zoekopdracht.);

Zoals u kunt zien, zijn de argumenten in een array opgenomen. Tijdens deze tutorial leer je hoe je ze kunt coderen.

Codering van uw argumenten

Er is een specifieke manier om de argumenten in de array te coderen, die als volgt is:

$ args = array ('parameter1' => 'waarde', 'parameter2' => 'waarde', 'parameter3' => 'waarde');

U moet de parameters en hun waarden tussen enkele aanhalingstekens plaatsen, gebruik => tussen hen, en scheid ze met een komma. Als u dit fout doet, voegt WordPress mogelijk niet al uw argumenten aan de query toe of krijgt u mogelijk een wit scherm.

De taxonomieparameters

Het instellen van parameters voor taxonomietermen is iets gecompliceerder dan voor categorieën en tags die u gebruikt tax_query. Binnen dit argument schrijf je een geneste reeks argumenten om de taxonomie en term te specificeren met behulp van deze parameters:

  • taxonomie (draad): Taxonomie.
  • veld- (draad): Selecteer de taxonomieterm door ('term_id (standaard), 'naam' of 'naaktslak').
  • termen (int / string / matrix): Taxonomie term (en).
  • include_children (boolean): Al dan niet kinderen opnemen voor hiërarchische taxonomieën. Standaard ingesteld op waar.
  • operator (draad): Operator om te testen. Mogelijke waarden zijn 'IN' (standaard), 'NIET IN', 'EN'.

Het feit dat je de hebt operator parameter betekent dat u niet hoeft te kiezen uit een van een reeks beschikbare argumenten om te definiëren of u termen invoert of uitsluit (zoals u doet voor tags en categorieën), maar gebruikt tax_query voor alles wat taxonomie-gerelateerd is in plaats daarvan.

Als u naar meerdere taxonomieën wilt zoeken, kunt u ook de relatie parameter vóór al uw arrays (één voor elke taxonomie) met EN of OF om aan te geven of u berichten met alle voorwaarden of een van hen wilt vinden.

Dit wordt het gemakkelijkst uitgelegd aan de hand van enkele voorbeelden.

Querying for One Taxonomy Term

Dit is het eenvoudigste scenario en omvat slechts het gebruik van een geneste array:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'field' => 'slug', 'terms' => 'my-term-slug',))) ;

De bovenstaande vragen voor berichten met de my-termijn-slug termijn in de mijn-taxonomie taxonomie. Merk op dat u ook de veld- parameter om te identificeren welk veld u gebruikt om de term te identificeren, tenzij u de term ID gebruikt die de standaard is. Als je de term ID zou willen gebruiken, zou je zoiets als dit gebruiken:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => '11')));

Het gebruik van de ID maakt het voor u moeilijker om te achterhalen waarnaar uw zoekopdracht op een later tijdstip zoekt, maar vermijdt eventuele problemen als u denkt dat uw gebruikers de term slakken kunnen bewerken.

Querying voor meerdere termen in één taxonomie

Als u berichten met een of meer van een reeks termen in dezelfde taxonomie wilt identificeren, schrijft u nog steeds een geneste array, maar voegt u een reeks termen toe.

Bijvoorbeeld om berichten te zoeken met ieder van een lijst met term-ID's uit uw taxonomie, gebruikt u:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => array ('11', '12'))));

Maar wat als je berichten wilt opvragen bij allemaal van deze voorwaarden? U moet de gebruiken operator parameter in je geneste array:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => array ('11', '12'), 'operator' => 'AND') ));

Merk op dat het eerste voorbeeld feitelijk de IN operator om berichten te vinden met een van de voorwaarden, maar omdat dit de standaard is, hoeft u dit niet in uw argumenten op te geven.

Een ander scenario is als u naar berichten wilt zoeken die geen enkele reeks termen in één taxonomie hebben, wat u wel bevalt:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => array ('11', '12'), 'operator' => 'NIET IN' )));

Hier heb ik de vervangen EN operator met NIET IN, wat betekent dat WordPress berichten zal vinden zonder een van de termen in de array.

Houd er rekening mee dat als u de voorkeur geeft aan het gebruik van slugs in plaats van over de term-ID's, u dit met elk van deze scenario's kunt doen. Het laatste voorbeeld ziet er als volgt uit:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'field' => 'slug', 'terms' => array ('my-slug', 'your- slug '),' operator '=>' NIET IN ')));

Een ander scenario is als u wilt zoeken naar berichten met één term, maar niet met een andere. Dit gebruikt de IN operator (die u niet hoeft op te nemen omdat dit de standaard is), met een minteken vóór de ID van alle voorwaarden die u wilt uitsluiten:

$ args = array ('tax_query' => array (array ('taxonomy' => 'my-taxonomy', 'terms' => array ('11', '-12'))));

Hiermee worden berichten aangevraagd met de term 11 maar niet met de term 12.

Termijnen voor het opzoeken van meerdere taxonomieën

Als u met meer dan één taxonomie wilt werken, moet u meer dan één array maken. Laten we naar het eenvoudigste voorbeeld kijken om berichten te zoeken met één term uit taxonomie1 en één term uit taxonomie2:

$ args = array ('tax_query' => array ('relation' => 'AND', array ('taxonomy' => 'taxonomy1', 'field' => 'slug', 'terms' => array ('slug -one ')), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ',' terms '=> array (' slug-two '))));

Hier heb ik twee geneste arrays geschreven: één voor elke taxonomie, met dezelfde argumenten als ik voor de voorbeelden met slechts één taxonomie. Ik ben daaraan vooraf gegaan met de relatie argument. U moet de relatie argument om WordPress te vertellen of het zoekt naar alle of sommige berichten die door elke array worden uitgevoerd. Dit werkt als volgt:

  • Als je gebruikt 'relatie' => 'EN', WordPress haalt de berichten op die in de eerste array zijn opgegeven en de tweede reeks. Dus in het bovenstaande voorbeeld alleen berichten met beide de slug-on slug in taxonomy1 en de slug-twee slug in taxonomy2 zal worden bevraagd.
  • Als je gebruikt 'relatie' => 'OF', WordPress haalt berichten op die door de eerste array zijn uitgevoerd of de tweede reeks. Dus in dit geval krijg je berichten met een van beide de slug-on slak of de slug-twee slak (of beide).

Dit is de code die je zou gebruiken als je op zoek was naar berichten met een van de twee naaktslakken:

$ args = array ('tax_query' => array ('relation' => 'OR', array ('taxonomy' => 'taxonomy1', 'field' => 'slug', 'terms' => array ('slug -one ')), array (' taxonomy '=>' taxonomy2 ',' field '=>' slug ',' terms '=> array (' slug-two '))));

U kunt ook zoeken naar meer dan één term in een bepaalde taxonomie door deze aan de array toe te voegen:

$ args = array ('tax_query' => array ('relation' => 'OR', array ('taxonomy' => 'taxonomy1', 'field' => 'slug', 'terms' => array ('slug -one ')), array (' taxonomie '=>' taxonomy2 ',' field '=>' slug ',' terms '=> array (' slug-two ',' slug-three '))));

Door het combineren van relatie argument met geneste query's ook met behulp van de operator argument, kunt u vrij complexe query's maken. Met de onderstaande argumenten worden berichten opgevraagd met een term uit één taxonomie, maar zonder een term uit een andere taxonomie:

$ args = array ('tax_query' => array ('relation' => 'AND', array ('taxonomy' => 'taxonomy1', 'field' => 'slug', 'terms' => array ('slug -one '),' operator '=>' NIET IN '), array (' taxonomie '=>' taxonomy2 ',' field '=>' slug ',' terms '=> array (' slug-two ')) ));

Merk op dat ik heb gebruikt 'relatie' => 'EN' hier: als ik het gebruikte OF, het zou berichten opvragen bij slug-twee en berichten zonder slug-on, in plaats van berichten die hebben slug-twee maar niet slug-on, dat is waar ik naar op zoek ben. 

U zou dit mogelijk verder kunnen nemen om de voorwaarden van uw taxonomieën te doorzoeken, hoe u ook wilde: het gebruik van de operator argument in beide geneste query's of door een extra geneste query toe te voegen aan zoektermen in een andere taxonomie.

Een opmerking over het belastingargument

U vraagt ​​zich misschien af ​​waarom ik de belasting argument, waar u eenvoudig uw argument als volgt schrijft:

$ args = array ('taxonomy1' => 'slug-one');

U bent misschien bekend met deze manier om taxonomieën te doorzoeken als u dit in het verleden heeft gedaan, maar het is nu verouderd en u moet het niet gebruiken. Dus hou je aan 'Tax_query'! Gebruik makend van tax_query geeft je toch veel meer flexibiliteit.

Samenvatting

Het opvragen van taxonomieën is een beetje gecompliceerder dan categorieën en tags, omdat je grip moet krijgen op de tax_query argument.

Zoals we echter hebben gezien, is dit een zeer krachtig argument dat u veel ruimte en flexibiliteit geeft om uw database te ondervragen op elke gewenste manier.