WP_Query-argumenten: aangepaste velden. Aangepaste veldparameters. We gebruiken het meta_compare-argument

Als je al een tijdje met WordPress werkt, weet je hoe moeilijk het vroeger was om lijsten met berichten te maken op basis van grote hoeveelheid criteria en tegelijkertijd in overeenstemming met WordPress-standaarden. Maar de afgelopen jaren is het platform verdwenen lange afstand. En nu, met de hulp van een machtige klasse WP_Query, kunnen we lijsten met berichten maken zonder onszelf op enigerlei wijze te beperken.

Wat is WP_Query?

Klas WP_Query is een van de belangrijkste onderdelen van WordPress-motor. Het bepaalt onder andere de zoekopdrachten die u op elke pagina nodig heeft en geeft berichten weer volgens de opgegeven criteria. Het slaat ook veel informatie op over de verzoeken die het doet, wat helpt bij pagina-optimalisatie (en het elimineren van fouten).

WP_Query stelt ons in staat om complexe databasequery's op een veilige, eenvoudige en modulaire manier uit te voeren.

Veiligheid

Tijdens onze interactie met dit object specificeren we alleen parameters en gebruiken we functies om ons doel te bereiken. Interne objecten zorgen zelf voor veel van de problemen, zoals SQL-injectiebescherming en gebruikscontrole het juiste type gegevens.

Eenvoud

Wanneer we dit object gebruiken, hoeven we de details van onze database niet te leren kennen. Omdat we een array gebruiken om onze parameters door te geven, is het niet nodig om handmatig join-query's of geneste query's te schrijven; maak gewoon een array met argumenten en een instantie van de klasse!

Modulariteit

WP_Query Hiermee kunt u voorkomen dat u SQL-query's gebruikt in de code die de klasse gebruikt associatieve array als argument. Dit biedt veel voordelen: je kunt argumenten uit elkaar combineren verschillende plaatsen code, voer een reeks functies uit en manipuleer ze op allerlei manieren.

Dus laten we aan de slag gaan!

"Standaard" lus in WordPress

Laten we eerst naar een gewone lus kijken en vervolgens dezelfde lus maken met behulp van WP_Query. Laten we aannemen dat we een categorie.php-bestand voor ons thema maken.

if (have_posts() ) :
terwijl (have_posts() ) :
de_post();
?>



eindig;
anders:
?>
Oeps, geen vermeldingen gevonden!
eindif ;
?>

Dezelfde lus met WP_Query:

$args = array ("kat" => 4 );
$category_posts = nieuwe WP_Query($args) ;

if ($category_posts -> have_posts()) :
while ($category_posts -> have_posts()) :
$category_posts -> de_post () ;
?>



eindig;
anders:
?>
Oeps, geen vermeldingen gevonden!
eindif ;
?>

Zoals je kunt zien, is er op het eerste gezicht niet veel verschil! Laten we het eens nader bekijken:

Query's maken

Op de categoriepagina willen we een lijst met berichten uit die categorie krijgen. Omdat we de query helemaal opnieuw opbouwen met WP_Query, moeten we dit zelf definiëren. We zullen hier later wat dieper op ingaan.

Een exemplaar van de klasse en query's voor berichten maken

Met behulp van een klasse-instantie en een reeks argumenten zal WP_Query proberen de opgegeven berichten op te halen.

Een lus creëren

Je kunt alles gebruiken normale functies, vergeet niet om ze als objectmethoden te gebruiken:

In plaats van have_posts(), gebruik $category_posts->have_posts().
In plaats van de_post(), gebruik $category_posts->de_post().

Zodra je alles hierboven hebt gedaan, kun je een van de sjabloontags gebruiken die we kennen en waarderen.

Als je dit in meer detail bekijkt, zul je zien dat het globale object $ bericht ook beschikbaar. Dit betekent dat als u een aangepaste lus gebruikt, er dingen mis kunnen gaan. Zorg ervoor dat u opslaat oorspronkelijke betekenis voorwerp $ bericht en herstel het na de cyclus.

Laten we verder gaan...

Het gemak waarmee we lussen kunnen maken ligt voor de hand, maar hoe creëren we eigenlijk queries voor records? Ik zal u een veelgebruikte methode laten zien die vaak wordt gebruikt bij het maken van sliders in commerciële thema's.

Heel vaak willen gebruikers van uw thema mooie sliders op hun sites, maar zijn ze misschien een beetje lui bij het maken van inhoud. Veel gebruikers willen ook toekomstige berichten weergeven die volgens de planning zullen worden gepubliceerd. Laten we een query maken om aankomende (dat wil zeggen niet-gepubliceerde) berichten met een afbeelding op te halen.

$args = array (
"post_status" => "toekomst" ,
"meta_query" => array (
array (
"key" => "_thumbnail_id" ,
"waarde" => "" ,
"vergelijk" => "!="
)
) ;
$slider_posts = nieuwe WP_Query($args) ;
?>

have_posts () ): ?>


have_posts () ): $slider_posts -> the_post () ?>




Korte en volledig begrijpelijke code - eenvoudig en mooi.

Standaardwaarden

Het is u misschien opgevallen dat ik in mijn verzoek niet het aantal vereiste records heb opgegeven. Hoeveel berichten staan ​​er in de lijst? En wat is de status van het bericht in het eerste verzoek dat we hebben gedaan?

Voor veel van de meest voorkomende argumenten zijn standaardwaarden ingesteld. Hier zijn er een paar die u niet hoeft op te geven, tenzij u ze wilt wijzigen:

berichten_per_pagina
Standaard wordt de waarde gebruikt die is opgegeven in de siteparameters voor het aantal berichten op de pagina.

post_type
Standaard is na.

post_status
Standaard is publiceren.

Een volledige lijst met parameters vindt u in de documentatie!

Arrays

In veel gevallen moet u meerdere waarden opgeven die het argument kan aannemen. En met WP_Query kunt u arrays gebruiken om uw leven gemakkelijker te maken. Hier zijn enkele voorbeelden:

Je kunt hiervoor een array gebruiken post_status om berichten met verschillende statussen te ontvangen. Merk op dat u de lijn kunt gebruiken elk om berichten met allerlei statussen te ontvangen.

Werken met metagegevens

Heb je dat al gezien WP_Query gaat geweldig om met metadata - we gebruikten meta_query in het tweede voorbeeld, toen we een schuifregelaar bouwden met berichten met afbeeldingen.

Laten we ons voorstellen dat we een WordPress-thema maken dat zal worden gebruikt voor een website voor het verhuren van een appartement(en). We slaan appartementen op in een aangepast berichttype en gebruiken metadata om aanvullende informatie op te slaan. Op deze manier kunnen we bijvoorbeeld gemakkelijk alle appartementen verkrijgen die plaats bieden aan vier of meer personen, of appartementen met een balkon, of alleen appartementen voor een dag met een jacuzzi.

$args = array (
"post_type" => "appartement" ,
"meta_query" => array (
"relatie" => "EN" ,
"=" => "="
)
) ;
?>

Voor meer informatie over de parameters die kunnen worden gebruikt, kunt u eenvoudigweg de sectie Aangepaste veldparameters van de WP_Query-documentatie raadplegen.

Methoden en eigenschappen

Nadat u een aanvraag heeft gedaan, kunt u veel informatie uit uw object halen. Een volledige lijst met "Methoden en eigenschappen" vindt u in de documentatie. Dit zijn degenen die ik het vaakst gebruik:

$vraag
Toont de queryreeks die wordt doorgegeven aan het object $wp_query. Dit is in sommige gevallen erg handig bij het oplossen van problemen.

$query_vars
Toont een associatieve array van de argumenten die u hebt doorgegeven. Als je veel mixt en matcht voordat je argumenten doorgeeft, kan deze tool handig zijn om te controleren of alles correct is doorgegeven.

$ bericht
Bevat de opgevraagde records uit de database.

$gevonden_posts
Een handig ding dat het totale aantal gevonden elementen toont (zonder de limiet ingesteld door het argument posts_per_page).

Met grote macht komt grote verantwoordelijkheid

WP_Query geeft je veel kracht, maar het heeft zijn nadelen. Veel mensen worden gek als ze beseffen hoe gemakkelijk het is om overal vragen te stellen.

Houd er rekening mee dat hoe meer verzoeken, hoe groter de belasting van de server. Wanneer u complexe query's maakt, kunt u problemen tegenkomen met uw hosting-RAM, wat waarschijnlijk een beperkte bron is waarover u beschikt.

Zorg ervoor dat de standaardquery op elke pagina wordt uitgevoerd. Wat heeft het voor zin om een ​​nieuwe zoekopdracht te maken om de nieuwste berichten op de startpagina te krijgen als deze standaard aanwezig is? Gebruik resultaatcaching om de serverbelasting te verminderen.


Als u vragen heeft, raden wij u aan onze te gebruiken

Als u onze reeks artikelen heeft gevolgd, weet u waarschijnlijk al hoe de klasse WP_Query werkt en hoe u deze kunt gebruiken om uw eigen query's te maken. Om te bepalen welke gegevens u uit de database wilt halen, moet u vertrouwd raken met de argumenten van deze klasse en leren hoe u deze correct kunt gebruiken.

Vandaag maken we kennis met de argumenten voor aangepaste velden ( aangepaste velden), maar laten we eerst onthouden hoe we argumenten in WP_Query moeten gebruiken.

Laten we onthouden hoe argumenten werken in WP_Query

Wanneer u WP_Query in thema’s of plug-ins gebruikt, zijn er vier hoofdelementen die u in uw code moet opnemen:

  • Argumenten voor een verzoek waarbij parameters worden gebruikt;
  • Het verzoek zelf;
  • Cyclus;
  • De laatste fase: het resetten van de opnamegegevens.

In de praktijk ziet het er als volgt uit:

have_posts()) ( // start van de cyclus van het verwerken van gegevens uit de queryresultaten terwijl ($query->have_posts()) ( $query->the_post(); // inhoud van het opgevraagde bericht ) ) // herstellen van de originele gegevens van het bericht wp_reset_postdata(); ?>

De argumenten vertellen WordPress welke gegevens uit de database moeten worden opgehaald:

$args = array(// Argumenten voor uw verzoek);

Zoals u kunt zien, zijn de argumenten ingesloten in een array.

Code maken voor de argumenten

Er is een speciale manier om argumenten in een array op te geven:

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

U moet parameters en hun waarden tussen enkele aanhalingstekens plaatsen en ertussen => gebruiken. Elk argument wordt gescheiden door een komma. Als u hier iets verkeerd doet, controleert WordPress mogelijk niet alle argumenten die u opgeeft en wordt er niets op het scherm weergegeven.

Aangepaste veldopties

Aangepaste velden ( ook wel berichtmetadata genoemd) kan een aparte WP_Meta_Query-klasse gebruiken. Om metagegevens van berichten te verkrijgen, kunt u daarom WP_Meta_Query of WP_Query ( die nog steeds toegang heeft tot WP_Meta_Query). Maar als u metadata en andere elementen moet opvragen ( zoals berichttype), dan mag alleen WP_Query worden gebruikt.

Het belangrijkste verschil tussen het gebruik van deze klasse en WP_Query is dat je met WP_Query eenvoudige argumenten kunt maken zonder dat je geneste arrays hoeft te gebruiken.

Opties voor een eenvoudig aangepast veldverzoek

Basis WP_Query-parameters voor het uitvoeren van query's op aangepaste velden:

  • meta_key( snaar): aangepaste veldsleutel;
  • meta_waarde( snaar
  • meta_waarde_num( nummer): aangepaste veldwaarde;
  • meta_vergelijk( snaar): operator voor testen " meta_waarde". Geldige waarden: "=", "!=", ">", ">=", "<", "<=", "LIKE", "NOT LIKE", "IN", "NOT IN", "BETWEEN", "NOT BETWEEN", "NOT EXISTS", "REGEXP", "NOT REGEXP" или "RLIKE". Значение по умолчанию: "=".

Gebruik deze opties om eenvoudige query's op aangepaste velden te maken. Als u bijvoorbeeld records wilt weergeven die aangepaste velden bevatten met de sleutel key1 ( ongeacht de betekenis ervan), moet u het volgende argument gebruiken:

$args = array("meta_key" => "sleutel1");

Dit argument haalt alle records op met een aangepast veld met key1 , ongeacht de waarde. Om een ​​specifieke waarde toe te wijzen, moet u een extra argument toevoegen:

$args = array("meta_key" => "sleutel1", "meta_waarde" => "waarde1");

Met dit argument worden alle records weergegeven met een aangepast veld dat een sleutel1 heeft met de waarde waarde1 .

U kunt ook alle records ophalen met een aangepast veld waarvan de waarde waarde1 is, ongeacht de sleutel. Dit is nodig wanneer meerdere aangepaste veldsleutels met dubbele waarden worden gebruikt:

$args = array("meta_value" => "waarde1");

Zoals u kunt zien, kunt u een query naar een willekeurig veld sturen op basis van een sleutel of een waarde, en het is helemaal niet nodig om beide argumenten elke keer op te geven.

We gebruiken het meta_compare-argument

Het is je misschien opgevallen dat er veel opties zijn voor het argument meta_compare. Laten we eens kijken naar de meest gebruikte:

  • =: Gelijk. Dit is de standaardinstelling. Dat wil zeggen, als u het argument meta_compare niet gebruikt, zal WP_Query het gebruiken;
  • !+: Niet gelijk;
  • >: Meer dan;
  • >=: Groter dan of gelijk aan;
  • LIKE: Deze optie negeert het hoofdlettergebruik waarin u de waarde invoert. Hier kunt u zelfs speciale tekens gebruiken om naar waarden te zoeken;
  • NOT LIKE: Werkt volgens hetzelfde principe als LIKE, maar is volledig het tegenovergestelde;
  • IN: Gebruik deze optie met een array als argument 'waarde' om te zoeken naar vermeldingen met een of meer waarden in de array;
  • BETWEEN: Gebruikt met een array van twee numerieke waarden (gespecificeerd in het meta_value-argument) om records te vinden met een aangepaste veldwaarde die tussen (maar niet gelijk aan) deze twee waarden ligt;
  • NOT BETWEEN: Zoekopdrachten naar records met een aangepaste veldwaarde die buiten het opgegeven bereik van twee numerieke waarden in meta_value ligt.

Met behulp van het argument meta_compare kunt u de sleutels of waarden van een aangepast veld uitsluiten. Als u alle records wilt ophalen, behalve de records waarvan de sleutelwaarde key1 gebruikt, gebruikt u de volgende code:

$args = array("meta_key" => "key1", "meta_compare" => "!=");

U kunt de waarde 'NOT IN' gebruiken in het meta_compare-argument, dat ook kan worden gebruikt met een reeks van meerdere waarden:

$args = array("meta_key" => "key1, key2", "meta_compare" => "NIET IN");

Met deze code worden records opgevraagd die geen aangepaste velden met sleutel1- of sleutel2-waarden hebben. Als u wilt zoeken naar records met een bepaald aangepast veld, maar niet een ander veld, kunt u een geneste array gebruiken, waarover ik u later zal vertellen.

In de bovenstaande voorbeelden worden niet-numerieke waarden gebruikt. U kunt WP_Query gebruiken met aangepaste velden die numerieke waarden hebben, niet alleen om berichten met die waarden op te halen, maar ook om berichten te bevragen die een aangepaste veldwaarde hebben die hoger of lager is dan die waarden. Dit kan bijvoorbeeld handig zijn in een online winkel wanneer u moet zoeken naar producten die goedkoper of duurder zijn dan de opgegeven prijs.

Om records te vinden met een aangepaste veldwaarde die groter is dan een bepaald getal, moet u de volgende code gebruiken:

$args = array("meta_key" => "numkey", "meta_value" => "100", "meta_compare" => ">");

Deze query retourneert alle records waarvan de aangepaste veldwaarde groter is dan 100. Als u records met waarden van 100 en hoger wilt opvragen, kunt u de parameter "meta_compare" => ">=" gebruiken.

U kunt ook het argument BETWEEN en een array gebruiken om records te vinden waarvan de aangepaste velden waarden in een specifiek bereik gebruiken:

$args = array("meta_key" => "numkey", "meta_value" => array("100", "200"), "meta_compare" => "TUSSEN");

Met een dergelijke zoekopdracht kunt u alle records vinden met aangepaste veldwaarden tussen 100 en 200.

Query's voor geneste aangepaste velden

Als u een query op meerdere aangepaste velden moet uitvoeren of meer dan één operator moet gebruiken, kunt u een geneste array gebruiken.

De verzoekstructuur zal als volgt zijn:

$args = array("meta_query" => array("relation" => "", // Optioneel argument. array(// `meta_query` argumenten zullen hier staan.)));

De structuur van het argument "meta_query" in de klasse WP_Query zal hetzelfde zijn als bij gebruik van de klasse WP_Meta_Query, waarover we in de volgende artikelen in detail zullen praten.

Met de release van WordPress 4.1 werd het mogelijk om meerdere niveaus van geneste arrays te gebruiken om nog complexere en preciezere zoekopdrachten te maken. De structuur van dergelijke verzoeken ziet er ongeveer als volgt uit:

$args = array("meta_query" => array("relation" => "", // Optioneel argument. array("relation" => "", array (// Eerste set `meta_query` argumenten.), array ( // Tweede set `meta_query` argumenten.))));

Met deze aanpak kunt u verschillende relaties op verschillende niveaus in een query gebruiken. U kunt bijvoorbeeld een query maken voor records met één waarde in het ene aangepaste veld, en beide waarden in een ander aangepast veld.

Tot slot

De klasse WP_Query gebruiken om query's met metadata van berichten te maken ( of aangepaste velden) biedt de flexibiliteit om met veel verschillende argumenten te werken in combinatie met operators.

Als u alleen argumenten voor post-metagegevens in uw zoekopdracht wilt gebruiken ( en combineer ze niet met anderen), dan kun je ook de klasse WP_Meta_Query gebruiken, waar we het later over zullen hebben.

Vertaling van het artikel “ WP_Query-argumenten: aangepaste velden” werd voorbereid door het vriendelijke team van het project Website bouwen van A tot Z.

Prestashop is een online winkelbeheerengine. Op internet vindt u veel betaalde en gratis Prestashop-modules die helpen productpagina's te verbeteren en het aantal conversies te vergroten. In dit artikel bekijken we de 5 beste SEO-modules.

init() Initialiseer het object, stel alle eigenschappen in op null, nul of false. parse_query($query) Neemt een queryreeks die het verzoek definieert, parseert deze en vult alle eigenschappen in, behalve $posts , $post_count , $post en $current_post . parse_query_vars() Herparseer de oude queryreeks. get($query_var) Haal een benoemde queryvariabele op. idempotent en mag niet meer dan één keer worden aangeroepen voor hetzelfde queryobject. Als u dit wel doet, kan dit resulteren in een verbroken query. next_post() (te gebruiken wanneer in ) Ga door naar het volgende bericht in $posts . Verhoog $current_post en stel $post in op het (nieuwe) huidige post-object (let op: hiermee wordt niet de globale $post-variabele ingesteld, alleen de instantievariabele van het WP_Query-object.) Retourneert het huidige post-object(Dit is verouderd. Gebruik "next_post_link()")

the_post() (te gebruiken wanneer in ) Ga naar het volgende bericht en stel de globale variabele $post in.

have_posts() (te gebruiken in of vlak voor The Loop) Bepaal of er nog berichten over zijn om weer te geven. Roept rewind_posts() aan en retourneert false als er geen berichten meer over zijn. Vanwege het terugspoelen kun je er niet op vertrouwen dat have_posts() false blijft. Zien. rewind_posts() Reset $current_post en $post .

&query($query) Roep parse_query() en get_posts() aan. Retourneer de resultaten van get_posts() .

  • get_queried_object() Stel $queried_object in als dit nog niet is ingesteld en retourneer het. get_queried_object_id() Stel $queried_object_id in als dit nog niet is ingesteld en retourneer het. (WP_Query($query = "") (constructor) Als u een queryreeks opgeeft, roept u daarmee query() aan. Parameters
  • Auteurparameters (snaar Toon berichten die aan een bepaalde auteur zijn gekoppeld.
  • auteur (int | snaar
  • ) - gebruik auteur-ID of door komma's gescheiden lijst met ID's. (int | snaar auteur_naam

) - gebruik " user_nicename " - NIET naam.

auteur__in

reeks

auteur__niet_in

) - gebruik auteur-ID (beschikbaar sinds ).

Toon berichten voor één auteur

Toon berichten op auteur, met behulp van auteurs-ID:

$query = nieuwe WP_Query(array("auteur" => 123));

Toon berichten op auteur, met behulp van auteur " user_nicename ":

$query = nieuwe WP_Query(array("auteur_naam" => "rami")); Toon berichten van verschillende auteurs Toon berichten van verschillende specifieke auteurs:

$query = nieuwe WP_Query(array("auteur" => "2,6,17,38"));

Sluit berichten uit die toebehoren aan een auteur

Toon alle berichten

behalve

die van een auteur (enkelvoud) door de id vooraf te laten gaan door een "-" (minteken):

$query = nieuwe WP_Query(array("auteur" => -12));

Behandeling van meerdere auteurs

Berichten van meerdere auteurs weergeven:

  • $query = nieuwe WP_Query(array("auteur__in" => array(2, 6))); (Je kunt op deze manier ook meerdere auteurs uitsluiten:$query = nieuwe WP_Query(array("auteur__not_in" => array(2, 6)));
  • Categorieparameters (snaar Toon berichten die aan bepaalde categorieën zijn gekoppeld.
  • kat (int | snaar$query = nieuwe WP_Query(array("auteur__not_in" => array(2, 6)));
  • int (int | snaar$query = nieuwe WP_Query(array("auteur__not_in" => array(2, 6)));
  • ) - gebruik categorie-ID. (int | snaar$query = nieuwe WP_Query(array("auteur__not_in" => array(2, 6)));

categorienaam

Geef berichten weer die deze categorie hebben (en eventuele onderliggende items van die categorie), met behulp van categorie-ID:

$query = nieuwe WP_Query(array("cat" => 4));

Geef berichten weer die deze categorie bevatten (en eventuele onderliggende items uit die categorie), met behulp van categorie-slug:

$query = nieuwe WP_Query(array("category_name" => "staf"));

Geef berichten weer die deze categorie hebben (geen onderliggende items van die categorie), met behulp van categorie-ID:

$query = nieuwe WP_Query(array("category__in" => 4));

Toon berichten uit verschillende categorieën

Geef berichten weer die deze categorieën hebben, met behulp van categorie-ID:

$query = nieuwe WP_Query(array("cat" => "2,6,17,38"));

Geef berichten weer die deze categorieën bevatten, met behulp van categorie-slug:

$query = new WP_Query(array("category_name" => "personeel,nieuws"));

Geef berichten weer die 'alle' van deze categorieën bevatten:

$query = nieuwe WP_Query(array("category_name" => "personeel+nieuws"));

Sluit berichten uit die tot de categorie behoren

$query = nieuwe WP_Query(array("auteur_naam" => "rami")); Toon berichten van verschillende auteurs die uit een categorie door de id ervan vooraf te laten gaan door een "-" (minteken).

$query = nieuwe WP_Query(array("cat" => "-12,-34,-56"));

Behandeling van meerdere categorieën

Geef berichten weer die in meerdere categorieën vallen. Hier worden berichten weergegeven die in zowel categorie 2 als 6 vallen:

$query = nieuwe WP_Query(array("category__and" => array(2, 6)));

Om berichten uit categorie 2 OF 6 weer te geven, kunt u cat gebruiken zoals hierboven vermeld, of door categorie__in te gebruiken (merk op dat hier geen berichten van kinderen uit deze categorieën worden weergegeven):

$query = nieuwe WP_Query(array("category__in" => array(2, 6)));

Je kunt op deze manier ook meerdere categorieën uitsluiten:

$query = nieuwe WP_Query(array("category__not_in" => array(2, 6)));

Tagparameters

Toon berichten die aan bepaalde tags zijn gekoppeld.

  • label (snaar) - gebruik tag-slug.
  • tag_id (Je kunt op deze manier ook meerdere auteurs uitsluiten:) - gebruik tag-ID.
  • tag__en (int | snaar) - gebruik tag-ID's.
  • tag__in (int | snaar) - gebruik tag-ID's.
  • tag__not_in (int | snaar) - gebruik tag-ID's.
  • tag_slug__en (int | snaar) - gebruik tag-slugs.
  • tag_slug__in (int | snaar) - gebruik tag-slugs.

Toon berichten voor één tag

Geef berichten met deze tag weer met behulp van tag slug:

$query = new WP_Query(array("tag" => "koken"));

Geef berichten weer die deze tag hebben, met behulp van tag-ID:

$query = nieuwe WP_Query(array("tag_id" => 13));

Toon berichten van verschillende tags

Geef berichten weer die 'een van deze' tags hebben:

$query = new WP_Query(array("tag" => "brood, bakken"));

parse_query($query) Neemt een queryreeks die het verzoek definieert, parseert deze en vult alle eigenschappen in, behalve $posts , $post_count , $post en $current_post . Als WP_Query bepaalt dat het resultaat enkelvoudig is (is waar), negeert het de parameter tax_query. Als u tax_query wilt wijzigen, gebruikt u het filter om de vereiste SQL-instructies toe te voegen.

Belangrijke opmerking: tax_query duurt een int | snaar van argumenten voor belastingvragen arrays(er is een array van arrays voor nodig). Met deze constructie kunt u meerdere taxonomieën opvragen met behulp van de relatie parameter in de eerste (buitenste) array om de Booleaanse relatie tussen de taxonomiearrays te beschrijven.

Eenvoudige taxonomiequery:

Weergave berichten getagd met bob, onder mensen aangepaste taxonomie:

$args = array("post_type" => "post", "tax_query" => array(array("taxonomie" => "mensen", "field" => "slug", "terms" => "bob", ),),); $query = nieuwe WP_Query($args);

Behandeling van meerdere taxonomie:

Weergave berichten uit verschillende aangepaste taxonomieën:

$args = array("post_type" => "post", "tax_query" => array("relation" => "AND", array("taxonomie" => "movie_genre", "field" => "slug", "terms" => array("actie", "komedie"),), array("taxonomie" => "actor", "field" => "term_id", "terms" => array(103, 115, 206 ), "operator" => "NIET IN",),),); $query = nieuwe WP_Query($args);

Weergave berichten die in de citaten categorie OF hebben de citaat :

$args = array("post_type" => "post", "tax_query" => array("relation" => "OR", array("taxonomie" => "categorie", "veld" => "slak", "terms" => array("quotes"),), array("taxonomie" => "post_format", "field" => "slug", "terms" => array("post-format-quote"), ),),); $query = nieuwe WP_Query($args);

Geneste taxonomieverwerking:

De "tax_query"-clausules kunnen worden genest om complexere query's te maken. Voorbeeld: weergave berichten die in de citaten categorie OF beide hebben de citaat berichtformaat EN bevinden zich in de wijsheid categorie:

$args = array("post_type" => "post", "tax_query" => array("relation" => "OR", array("taxonomie" => "categorie", "veld" => "slak", "terms" => array("quotes"),), array("relation" => "AND", array("taxonomie" => "post_format", "field" => "slug", "terms" => array("post-format-quote"),), array("taxonomie" => "categorie", "veld" => "slak", "terms" => array("wijsheid"),),),) ,); $query = nieuwe WP_Query($args);

Zoekparameter

Toon berichten op basis van een zoekopdracht op trefwoord.

  • S (snaar) - Zoek op trefwoord.

Toon berichten op basis van een zoekopdracht op trefwoord

Berichten weergeven die overeenkomen met de zoekterm 'trefwoord':

$query = nieuwe WP_Query(array("s" => "trefwoord"));

Als u een term voorafgaat met een koppelteken, worden berichten die overeenkomen met die term uitgesloten. Bijvoorbeeld: "kussen -sofa" retourneert berichten met "kussen" maar niet met "sofa" (beschikbaar sinds ).

Bericht- en paginaparameters

Geef inhoud weer op basis van bericht- en paginaparameters. Houd er rekening mee dat het standaard post_type alleen is ingesteld om berichten weer te geven, maar geen pagina's.

  • P (Je kunt op deze manier ook meerdere auteurs uitsluiten:) - gebruik bericht-ID. Het standaard berichttype is bericht.
  • naam (snaar) - gebruik post-slug.
  • titel (snaar) - gebruik berichttitel (beschikbaar bij ).
  • pagina_id (Je kunt op deze manier ook meerdere auteurs uitsluiten:) - gebruik pagina-ID.
  • paginanaam (snaar) - gebruik paginaslug.
  • post_parent (Je kunt op deze manier ook meerdere auteurs uitsluiten:) - gebruik pagina-ID om alleen onderliggende pagina's te retourneren. Stel deze in op 0 om alleen vermeldingen op het hoogste niveau te retourneren.
  • post_parent__in (int | snaar) - gebruik bericht-ID's. Geef berichten op waarvan het bovenliggende item zich in een array bevindt. (beschikbaar sinds)
  • post_parent__not_in (int | snaar) - gebruik bericht-ID's. Geef berichten op waarvan het bovenliggende item niet in een array staat. Net als post__in/post__not_in overschrijven id's die aanwezig zijn in post_parent__in de id's die zijn opgegeven in post_parent__not_in (beschikbaar sinds)
  • post_in (int | snaar) - gebruik bericht-ID's. Geef berichten op die u wilt ophalen. AANDACHT Als je sticky posts gebruikt, worden deze opgenomen (voorafgegaan!) in de posts die je ophaalt, of je dat nu wilt of niet. Gebruik om dit gedrag te onderdrukken.
  • post__not_in (int | snaar) - gebruik bericht-ID's. Geef het bericht op dat NIET moet worden opgehaald. Als dit in dezelfde query als post__in wordt gebruikt, wordt het genegeerd.
  • post_name__in (int | snaar) - gebruik post-slugs. Geef berichten op die u wilt ophalen. (beschikbaar sinds)
  • post_type (snaar / int | snaar) - gebruik berichttypen. Haalt berichten op van , de standaardwaarde is "post". Als "tax_query" is ingesteld voor een query, wordt de standaardwaarde "any";
    • "post" - een bericht.
    • "pagina" - een pagina.
    • "revisie" - een herziening.
    • "bijlage" - een bijlage. Hoewel de standaard WP_Query post_status "publiceren" is, hebben bijlagen de standaard post_status "inherit". Dit betekent dat er geen bijlagen worden geretourneerd, tenzij u post_status ook expliciet instelt op "inherit" of "any". (Zie hieronder)
    • "nav_menu_item" - een navigatiemenu-item
    • " any " - haalt elk type op, behalve revisies en typen waarbij "exclude_from_search" is ingesteld op true.
    • Aangepaste berichttypen (bijvoorbeeld films)

Toon bericht op type

Alleen pagina's weergeven:

$query = nieuwe WP_Query(array("post_type" => "pagina"));

Toon " elk " berichttype (haalt elk type op behalve revisies en typen waarbij "exclude_from_search" is ingesteld op TRUE):

$query = nieuwe WP_Query(array("post_type" => "elke"));

Geef meerdere berichttypen weer, inclusief aangepaste berichttypen:

$args = array("post_type" => array("post", "pagina", "film", "boek")); $query = nieuwe WP_Query($args);

Statusparameters

  • post_status (snaar / int | snaar) - gebruik berichtstatus. Haalt berichten op van . De standaardwaarde is "publiceren", maar als de gebruiker is ingelogd, wordt "privé" toegevoegd. Openbaar is standaard ook inbegrepen. En als de query wordt uitgevoerd in een beheerderscontext (beheergebied of AJAX-oproep), worden er ook beschermde statussen toegevoegd. Standaard zijn de beschermde statussen "toekomstig", "concept" en "in behandeling".
    • " publiceren " - een gepubliceerd bericht of pagina.
    • "in behandeling" - bericht wacht op beoordeling.
    • "concept" - een bericht met de conceptstatus.
    • "auto-concept" - een nieuw gemaakt bericht, zonder inhoud.
    • "toekomst" - een bericht dat in de toekomst moet worden gepubliceerd.
    • "privé" - niet zichtbaar voor gebruikers die niet zijn ingelogd.
    • "erven" - een herziening. zien.
    • "trash" - bericht bevindt zich in de prullenbak (beschikbaar sinds ).
    • " any " - haalt elke status op, behalve die van berichtstatussen waarbij "exclude_from_search" is ingesteld op true (d.w.z. prullenbak en automatisch concept).

Toon bericht op status

Alleen concepten weergeven:

$query = nieuwe WP_Query(array("post_status" => "concept"));

Toon meerdere berichtstatus:

$args = array("post_status" => array("in behandeling", "concept", "toekomstige")); $query = nieuwe WP_Query($args);

Alle bijlagen weergeven:

$args = array("post_status" => "any", "post_type" => "bijlage"); $query = nieuwe WP_Query($args);

Commentaarparameters

$paged = (get_query_var("pagina")) ? get_query_var("pagina") : 1; $query = nieuwe WP_Query(array("gepagineerd" => $gepagineerd));

Toon sticky berichten

Alleen het eerste sticky bericht weergeven:

$sticky = get_option("sticky_posts"); $query = nieuwe WP_Query(array("p" => $sticky));

Geef alleen het eerste sticky bericht weer, als er geen is, wordt het laatst gepubliceerde bericht weergegeven:

$sticky = get_option("sticky_posts"); $args = array("posts_per_page" => 1, "post__in" => $sticky, "ignore_sticky_posts" =>

Geef alleen het eerste sticky bericht weer, voeg deze regel toe aan het bovenstaande blok:

If ($sticky) ( // plaats hier uw gegevens... )

Laat geen sticky berichten zien

Sluit alle vastgezette berichten uit van de zoekopdracht:

$query = nieuwe WP_Query(array("post__not_in" => get_option("sticky_posts")));

Retourneer ALLE berichten binnen de categorie, maar laat geen sticky berichten bovenaan zien ("negeren") (ze worden nog steeds in hun natuurlijke positie weergegeven, bijvoorbeeld op datum):

$query = new WP_Query(array("ignore_sticky_posts" => 1, "posts_per_page" => 3, "cat" => 6);

Sluit sticky posts uit van een categorie. Retourneer berichten binnen de categorie, maar sluit sticky berichten volledig uit en houd u aan de paginaregels:

$paged = get_query_var("paging") ? get_query_var("gepagineerd"): 1; $sticky = get_option("sticky_posts"); $args = array("cat" => 3, "ignore_sticky_posts" => 1, "post__not_in" => $sticky, "paged" => $paged,); $query = nieuwe WP_Query($args);

Bestel- en bestelparameters

Sorteer opgehaalde berichten.

  • volgorde (tekenreeks | reeks) - Geeft de oplopende of aflopende volgorde van de parameter "orderby" aan. Standaard ingesteld op "DESC". Een array kan worden gebruikt voor meerdere order/orderby-sets.
    • "ASC" - oplopende volgorde van de laagste naar de hoogste waarden (1, 2, 3; a, b, c).
    • " DESC " - aflopende volgorde van de hoogste naar de laagste waarden (3, 2, 1; c, b, a).
  • bestellendoor (tekenreeks | reeks) - Sorteer opgehaalde berichten op parameter. Standaard ingesteld op "datum (post_date)". Er kunnen één of meer opties worden doorgegeven.
    • " geen " - Geen bestelling (beschikbaar sinds ).
    • "ID" - Bestel op post-ID. Let op het hoofdlettergebruik.
    • "auteur" - Sorteer op auteur. ("post_author" wordt ook geaccepteerd.)
    • " titel " - Sorteer op titel. (" post_title "wordt ook geaccepteerd.)
    • " name " - Order by post name (post slug). (" post_name " is also accepted.)!}
    • " type " - Bestel op (beschikbaar sinds ). ("post_type" wordt ook geaccepteerd.)
    • "datum" - Sorteer op datum. ("post_date" wordt ook geaccepteerd.)
    • "gewijzigd" - Sorteer op datum van laatste wijziging. ("post_modified" wordt ook geaccepteerd.)
    • " parent " - Sorteren op ouder-ID van bericht/pagina. ("post_parent" wordt ook geaccepteerd.)
    • "rand" - Willekeurige volgorde. U kunt ook " RAND(x) " gebruiken, waarbij " x " een geheel getal is. Let op: er moet een parameter "order" aanwezig zijn om "orderby" rand te laten werken.
    • " comment_count " - Sorteer op aantal reacties (beschikbaar sinds ).
    • "relevantie" - Sorteer op zoektermen in de volgende volgorde: Ten eerste of de hele zin overeenkomt. Ten tweede, als alle zoektermen binnen de titels vallen. Ten derde, of een van de zoektermen in de titels voorkomt. En ten vierde of de volledige zin in de inhoud voorkomt.
    • "menu_order" - Sorteer op paginavolgorde. Het vaakst gebruikt voor ( Volgorde veld in het vak Paginakenmerken bewerken) en voor (de gehele velden in het dialoogvenster Mediagalerij invoegen/uploaden), maar kunnen worden gebruikt voor elk berichttype met verschillende "menu_order"-waarden (deze zijn allemaal standaard ingesteld op 0).
    • " meta_value " - Merk op dat a" meta_key=keyname " must also be present in the query. Note also that the sorting will be alphabetical which is fine for strings (i.e. words), but can be unexpected for numbers (e.g. 1, 3, 34, 4, 56, 6, etc, rather than 1, 3, 4, 6, 34, 56 as you might naturally expect). Use " meta_value_num " instead for numeric values. You may also specify " meta_type " if you want to cast the meta value as a specific type. Possible values are "NUMERIC", "BINARY", "CHAR", "DATE", "DATETIME", "DECIMAL", "SIGNED", "TIME", "UNSIGNED", same as in " $meta_query ". When using " meta_type " you can also use " meta_value_* " accordingly. For example, when using DATETIME as " meta_type " you can use " meta_value_datetime " to define order structure.!}
    • " meta_value_num " - Sorteer op numerieke metawaarde (beschikbaar sinds ). Houd er ook rekening mee dat er ook een " meta_key=keyname " aanwezig moet zijn in de query. Deze waarde maakt numerieke sortering mogelijk, zoals hierboven vermeld in " meta_value ".
    • " post__in " - Preserve post ID order given in the " post__in " array (available since ). !} Opmerking
    • " post_name__in " - Behoud de volgorde van de post-slugs die is opgegeven in de array " post_name__in " (beschikbaar sinds ). Opmerking- de waarde van de orderparameter verandert de resulterende sorteervolgorde niet.
    • " post_parent__in " - Behoud de volgorde van de post-ouders die is opgegeven in de array " post_parent__in " (beschikbaar sinds ). Opmerking- de waarde van de orderparameter verandert de resulterende sorteervolgorde niet.

Toon berichten gesorteerd op titel, aflopende volgorde

Toon berichten gesorteerd op berichttitel in aflopende volgorde:

$args = array("orderby" => "titel", "order" =>

Toon berichten gesorteerd op "menu_order" met een terugval naar post "titel", in aflopende volgorde:

$args = array("orderby" => "menu_order title", "order" => "DESC",); $query = nieuwe WP_Query($args);

Willekeurig bericht weergeven

Eén willekeurig bericht weergeven:

$args = array("orderby" => "rand", "posts_per_page" => 1,); $query = nieuwe WP_Query($args);

Toon populaire berichten

Berichten weergeven, gerangschikt op aantal reacties:

$args = array("orderby" => "comment_count"); $query = nieuwe WP_Query($args);

Toon producten gesorteerd op prijs

Berichten met het type 'Product' weergeven, gerangschikt op het aangepaste veld 'Prijs':

$args = array("post_type" => "product", "orderby" => "meta_value_num", "meta_key" => "prijs",); $query = nieuwe WP_Query($args);

Meerdere 'orderby'-waarden

Geef pagina's weer geordend op "titel" en "menu_order". (titel is dominant):

$args = array("post_type" => "pagina", "orderby" => "title menu_order", "order" => "ASC",); $query = nieuwe WP_Query($args);

Meerdere "orderby"-waarden met behulp van een array

Geef pagina's weer geordend op "title" en "menu_order" met verschillende sorteervolgorde (ASC/DESC) (beschikbaar sinds ):

$args = array("orderby" => array("title" => "DESC", "menu_order" => "ASC")); $query = nieuwe WP_Query($args);

Meerdere orderby/order-paren

$args = array("orderby" => array("meta_value_num" => "DESC", "title" => "ASC"), "meta_key" => "leeftijd"); $query = nieuwe WP_Query($args);

"orderby" met "meta_value" en een aangepast berichttype

Geef berichten weer van het type 'my_custom_post_type', geordend op 'leeftijd' en gefilterd om alleen de leeftijden 3 en 4 weer te geven (met behulp van meta_query).

$args = array("post_type" => "my_custom_post_type", "meta_key" => "age", "orderby" => "meta_value_num", "order" => "ASC", "meta_query" => array(array( "sleutel" => "leeftijd", "waarde" => array(3, 4), "vergelijken" => "IN",),),); $query = nieuwe WP_Query($args);

"orderby" met meerdere "meta_key"s

Als u wilt ordenen op twee verschillende stukken postmeta (bijvoorbeeld Stad eerst en Staat als tweede), moet u uw metaquery combineren en koppelen aan uw orderby-array met behulp van "benoemde metaquery's". Zie het onderstaande voorbeeld:

$q = new WP_Query(array("meta_query" => array("relation" => "AND", "state_clause" => array("key" => "state", "value" => "Wisconsin",) , "city_clause" => array("key" => "city", "compare" => "EXISTS",),, "orderby" => array("city_clause" => "ASC", "state_clause" = > "BESCHRIJVING",),));

Datumparameters

Toon berichten die zijn gekoppeld aan een bepaalde tijd- en datumperiode.

  • jaar (Je kunt op deze manier ook meerdere auteurs uitsluiten:) - 4-cijferig jaartal (bijv. 2011).
  • maandnummer (Je kunt op deze manier ook meerdere auteurs uitsluiten:
  • w (Je kunt op deze manier ook meerdere auteurs uitsluiten:) - Week van het jaar (van 0 tot 53). Gebruikt de MySQL WEEK-opdracht. De modus is afhankelijk van de optie "start_of_week".
  • dag (Je kunt op deze manier ook meerdere auteurs uitsluiten:
  • uur (Je kunt op deze manier ook meerdere auteurs uitsluiten:) - Uur (van 0 tot 23).
  • minuut (Je kunt op deze manier ook meerdere auteurs uitsluiten:) - Minuten (van 0 tot 60).
  • seconde (Je kunt op deze manier ook meerdere auteurs uitsluiten:) - Seconde (0 tot 60).
  • M (Je kunt op deze manier ook meerdere auteurs uitsluiten:) - JaarMaand (Voor bijvoorbeeld: 201307 ).
  • datum_query (int | snaar) - Datumparameters (beschikbaar sinds ).
    • jaar (Je kunt op deze manier ook meerdere auteurs uitsluiten:) - 4-cijferig jaartal (bijv. 2011).
    • maand (Je kunt op deze manier ook meerdere auteurs uitsluiten:) - Maandnummer (van 1 tot 12).
    • week (Je kunt op deze manier ook meerdere auteurs uitsluiten:) - Week van het jaar (van 0 tot 53).
    • dag (Je kunt op deze manier ook meerdere auteurs uitsluiten:) - Dag van de maand (van 1 tot 31).
    • uur (Je kunt op deze manier ook meerdere auteurs uitsluiten:) - Uur (van 0 tot 23).
    • minuut (Je kunt op deze manier ook meerdere auteurs uitsluiten:) - Minuut (van 0 tot 59).
    • seconde (Je kunt op deze manier ook meerdere auteurs uitsluiten:) - Seconde (0 tot 59).
    • na (tekenreeks/array) - Datum waarop berichten daarna worden opgehaald. Accepteert strtotime()
      • jaar (snaar
      • maand (snaar) De maand van het jaar. Accepteert nummers 1-12. Standaard: 12.
      • dag (snaar) De dag van de maand. Accepteert nummers 1-31. Standaard: laatste dag van de maand.
    • voor (tekenreeks/array) - Datum waarop eerdere berichten moeten worden opgehaald. Accepteert strtotime() -compatibele tekenreeks, of een reeks van waarden voor "jaar", "maand", "dag":
      • jaar (snaar) Accepteert elk jaartal van vier cijfers. Standaard is leeg.
      • maand (snaar) De maand van het jaar. Accepteert nummers 1-12. Standaard: 1.
      • dag (snaar) De dag van de maand. Accepteert nummers 1-31. Standaard: 1.
    • inclusief (Booleaans) - Voor na/voor, of de exacte waarde moet overeenkomen of niet".
    • vergelijken (snaar) - Zie WP_Date_Query::get_compare().
    • kolom (snaar) - om tegen te vragen. Standaard: "post_date".
    • relatie (snaar) - OF of EN, hoe de subarrays moeten worden vergeleken. Standaard: EN.

Retourneert berichten van 12 december 2012:

$query = new WP_Query("jaar=2012&maandnum=12&dag=12");

$args = array("date_query" => array(array("jaar" => 2012, "maand" => 12, "dag" => 12,),),); $query = nieuwe WP_Query($args);

Retourneert berichten voor vandaag:

$vandaag = getdate(); $query = new WP_Query("year=" . $today["year"] . "&monthnum=" . $today["mon"] . "&day=" . $today["mday"]);

$vandaag = getdate(); $args = array("date_query" => array(array("year" => $vandaag["jaar"], "maand" => $vandaag["maandag"], "dag" => $vandaag["mdag "],),),); $query = nieuwe WP_Query($args);

Retourneert berichten voor deze week:

$week = datum("W"); $jaar = datum("Y"); $query = new WP_Query("year=" . $year . "&w=" . $week);

$args = array("date_query" => array(array("jaar" => datum("Y"), "week" => datum("W"),),),); $query = nieuwe WP_Query($args);

Retourposten tussen 9.00 en 17.00 uur op weekdagen

$args = array("date_query" => array(array("uur" => 9, "vergelijk" => ">=",), array("uur" => 17, "vergelijk" => "<=",), array("dayofweek" =>array(2, 6), "vergelijk" => "TUSSEN",),), "posts_per_page" =>

Berichten retourneren van 1 januari tot 28 februari

$args = array("date_query" => array(array("after" => "1 januari 2013", "before" => array("year" => 2013, "maand" => 2, "dag" => 28,), "inclusief" => waar,),), "posts_per_page" => -1,); $query = nieuwe WP_Query($args);

Houd er rekening mee dat als een strtotime() -compatibele tekenreeks met alleen een datum is doorgegeven in de parameter before, deze op die datum wordt geconverteerd naar 00:00:00. In dit geval zou de datum niet in de query worden opgenomen, zelfs als inclusief was ingesteld op waar. Als u een vóór-datum inclusief wilt hebben, neemt u ook de tijd op, zoals "before" => "2013-02-28 23:59:59" , of gebruikt u de array-indeling, die automatisch wordt aangepast als inclusief is ingesteld .

Retourposts die meer dan een jaar geleden zijn geplaatst, maar de afgelopen maand zijn gewijzigd

$args = array("date_query" => array(array("column" => "post_date_gmt", "before" => "1 jaar geleden",), array("column" => "post_modified_gmt", "after" => "1 maand geleden",),), "posts_per_page" => -1,); $query = nieuwe WP_Query($args);

De "date_query"-clausules kunnen worden genest om complexe query's te construeren. Zie voor details over de syntaxis.

Aangepaste veldparameters

Toon berichten die aan een bepaald aangepast veld zijn gekoppeld.

Dit deel van de query wordt geparseerd door , dus controleer ook of deze lijst met argumenten niet up-to-date is.

  • meta_sleutel (snaar) - Aangepaste veldsleutel.
  • meta_waarde (snaar) - Aangepaste veldwaarde.
  • meta_waarde_num (nummer) - Aangepaste veldwaarde.
  • meta_vergelijk (snaar) - Operator om de " meta_value ". Mogelijke waarden zijn"=", "!=", ">", ">=", "!}<", "<=", "LIKE", "NOT LIKE", "IN", "NOT IN", "BETWEEN", "NOT BETWEEN", "NOT EXISTS", "REGEXP", "NOT REGEXP" or "RLIKE". Default value is "=".
  • meta_query (int | snaar) - Aangepaste veldparameters (beschikbaar sinds ).
    • relatie (snaar) - De logische relatie tussen elke innerlijke meta_query-array als er meer dan één is. Mogelijke waarden zijn "AND", "OR". Niet gebruiken met een enkele innerlijke meta_query-array.

meta_query bevat ook een of meer arrays met de volgende sleutels:

  • sleutel (snaar) - Aangepaste veldsleutel.
  • waarde (snaar|int | snaar) - Aangepaste veldwaarde. Het kan alleen een array zijn wanneer vergelijken is "IN" , "NOT IN" , "BETWEEN" of "NOT BETWEEN" . U hoeft geen waarde op te geven wanneer u de vergelijkingen 'EXISTS' of 'NOT EXISTS' gebruikt in WordPress 3.9 en hoger.
    (parse_query($query) Neemt een queryreeks die het verzoek definieert, parseert deze en vult alle eigenschappen in, behalve $posts , $post_count , $post en $current_post . Vanwege bug #23268 is een waarde vereist om NOT EXISTS-vergelijkingen correct te laten werken vóór 3.9. Je moet leveren sommige tekenreeks voor de waardeparameter. Een lege string of NULL werkt NIET. Elke andere string is echter voldoende en zal NIET in uw SQL verschijnen als u NOT EXISTS gebruikt. Inspiratie nodig? Hoe zit het met "bug #23268".)
  • vergelijken (snaar) - Operator om te testen. Mogelijke waarden zijn "=", "!=", ">", ">=", "<", "<=", "LIKE", "NOT LIKE", "IN", "NOT IN", "BETWEEN", "NOT BETWEEN", "EXISTS" and "NOT EXISTS". Default value is "=".
  • type (snaar) - Aangepast veldtype. Mogelijke waarden zijn "NUMERIC", "BINARY", "CHAR", "DATE", "DATETIME", "DECIMAL", "SIGNED", "TIME", "UNSIGNED". De standaardwaarde is "CHAR". U kunt ook precisie en schaal opgeven voor de typen "DECIMAL" en "NUMERIC" (bijvoorbeeld "DECIMAL(10,5)" of "NUMERIC(10)" zijn geldig).

Het "type" DATE werkt alleen met de "vergelijk"-waarde BETWEEN als de datum is opgeslagen in het formaat JJJJ-MM-DD en is getest met dit formaat.

Belangrijke opmerking: meta_query duurt een int | snaar van metaquery-argumenten arrays(er is een array van arrays voor nodig) - je kunt dit zien in de onderstaande voorbeelden. Met deze constructie kunt u meerdere metagegevens opvragen met behulp van de relatie parameter in de eerste (buitenste) array om de Booleaanse relatie tussen de metaquery's te beschrijven. Geaccepteerde argumenten zijn "AND", "OR". De standaardwaarde is "EN".

Eenvoudige aangepaste veldquery:

Berichten weergeven waarbij de aangepaste veldsleutel 'kleur' ​​is, ongeacht de aangepaste veldwaarde:

$query = nieuwe WP_Query(array("meta_key" => "kleur"));

Berichten weergeven waarbij de aangepaste veldwaarde 'blauw' is, ongeacht de aangepaste veldsleutel:

$query = nieuwe WP_Query(array("meta_value" => "blauw"));

Weergave waarbij de aangepaste veldwaarde 'blauw' is, ongeacht de aangepaste veldsleutel:

$args = array("meta_value" => "blauw", "post_type" => "pagina"); $query = nieuwe WP_Query($args);

Berichten weergeven waarbij de aangepaste veldsleutel 'kleur' ​​is en de aangepaste veldwaarde 'blauw' is:

$args = array("meta_key" => "kleur", "meta_value" => "blauw"); $query = nieuwe WP_Query($args);

Berichten weergeven waarbij de aangepaste veldsleutel 'kleur' ​​is en de aangepaste veldwaarde NIET 'blauw' IS:

$args = array("meta_key" => "kleur", "meta_value" => "blauw", "meta_compare" => "!="); $query = nieuwe WP_Query($args);

Geef berichten weer waarbij de aangepaste veldwaarde een getal is. Toont alleen berichten waar dat aantal kleiner is dan 10. (WP_Query gebruikt deze vergelijking om te vergelijken: $post_meta . $args["meta_compare"] . $args["meta_value"] , waarbij "$post_meta" de waarde is van het aangepaste bericht meta opgeslagen in elk bericht; de feitelijke vergelijking met de ingevulde waarden: $post_meta< 10)

$args = array("post_type" => "post", "meta_key" => "nummer", "meta_value_num" => 10, "meta_compare" => "<",); $query = new WP_Query($args);

Geef berichten weer waarbij de aangepaste veldsleutel een ingestelde datum is en de aangepaste veldwaarde nu is. Toont alleen berichten waarvan de datum nog niet is verstreken.

$args = array("post_type" => "event", "meta_key" => "event_date", "meta_value" => date("Ymd"), // wijzig hoe "event date" wordt opgeslagen "meta_compare" = > ">",); $query = nieuwe WP_Query($args);

Geef 'product'(en) weer waarbij de aangepaste veldsleutel 'prijs' is en de aangepaste veldwaarde MINDER DAN OF GELIJK AAN 22.
Door de parameter 'meta_value' te gebruiken, wordt de waarde 99 beschouwd als groter dan 100, omdat de gegevens worden opgeslagen als 'strings' en niet als 'getallen'. Gebruik 'meta_value_num' voor nummervergelijking.

$args = array('meta_key' => 'prijs', 'meta_value' => '22', 'meta_compare' => '<=', 'post_type' =>'product'); $query = nieuwe WP_Query($args);

Berichten weergeven met een aangepaste veldwaarde van nul (0), ongeacht de aangepaste veldsleutel:

$args = array('meta_value' => '_wp_zero_value'); $query = nieuwe WP_Query($args);

Afhandeling van enkele aangepaste velden:

Berichten uit één aangepast veld weergeven:

$args = array('post_type' => 'product', 'meta_query' => array(array('key' => 'kleur', 'waarde' => 'blauw', 'vergelijk' => 'NIET ZOALS' ,),),); $query = nieuwe WP_Query($args);

(Houd er rekening mee dat meta_query geneste arrays verwacht, zelfs als u maar één query heeft.)

In de aflevering van vandaag van onze serie waarin we de klasse WP_Query verkennen, leer je over verschillende argumenten die je met WP_Query kunt gebruiken om query's uit te voeren:

  • status;
  • volgorde;
  • paginering.

Deze argumenten kunnen worden gebruikt om records uit de database op te halen, in bijlagequery's, om records opnieuw te ordenen en te sorteren, om het aantal weer te geven records op te geven, en nog veel meer.

Laten we onthouden hoe argumenten werken in WP_Query

Wanneer u WP_Query in uw eigen thema’s of plug-ins gebruikt, zijn er vier hoofdelementen die u in uw code moet opnemen:

  • Argumenten voor een verzoek waarbij parameters worden gebruikt;
  • Het verzoek zelf;
  • Cyclus;
  • De laatste fase: het resetten van de opnamegegevens.

In de praktijk ziet het er als volgt uit:

have_posts()) ( // start van de cyclus van het verwerken van gegevens uit de queryresultaten terwijl ($query->have_posts()) ( $query->the_post(); // inhoud van het opgevraagde bericht ) ) // herstellen van de originele gegevens van het bericht wp_reset_postdata(); ?>

Argumenten vertellen WordPress welke gegevens uit de database moeten worden opgehaald. Laten we ons concentreren op het allereerste begin van de code:

$args = array(// Argumenten voor uw verzoek);

Zoals u kunt zien, zijn de argumenten ingesloten in een array.

Code maken voor de argumenten

Er is een specifieke syntaxis voor het initialiseren van argumenten in een array:

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

U moet parameters en hun waarden tussen enkele aanhalingstekens plaatsen en ertussen => gebruiken. Argumenten worden gescheiden door komma's. Als u de gevestigde syntaxis niet volgt, is het mogelijk dat WordPress niet alle argumenten die u opgeeft, ondervraagt, en als gevolg daarvan wordt er niets op het scherm weergegeven.

Statusopties

Zoals je weet geeft WordPress elk bericht een aparte status. Je kunt de parameter post_status gebruiken om berichten met een of meer statussen op te vragen.

De volgende argumenten zijn beschikbaar:

  • publiceren: gepubliceerd bericht of pagina;
  • in behandeling: de inzending is in afwachting van beoordeling;
  • concept: vermelding in conceptstatus;
  • automatisch concept: nieuw gemaakt bericht, zonder enige inhoud;
  • toekomst: geplande binnenkomst;
  • privé: de vermelding is niet zichtbaar voor bezoekers die niet zijn ingelogd op de site;
  • inherit: gewijzigde berichtversie of status voor bijgevoegde berichten;
  • prullenbak : het item bevindt zich in de prullenbak;
  • any : vraagt ​​om elke status behalve die met de parameter 'exclude_from_search' ingesteld op waar (bijvoorbeeld automatisch concept t of afval).

Als u geen status opgeeft in uw verzoekargumenten, zal WordPress standaard publiceren ; als de gebruiker op de site is geautoriseerd, wordt bij het verzoek ook rekening gehouden met records met de privéstatus. Voer je de aanvraag als beheerder uit, dan houdt WordPress ook rekening met de beschermde statussen: future , draft en in behandeling .

Stel dat u een postersite heeft die een eigen evenementposttype gebruikt en de datum waarop een evenement is gepland als publicatiedatum gebruikt. Standaard geeft WordPress geen evenementen weer die nog niet hebben plaatsgevonden. Ondanks wat je hebt gepland, ligt de publicatiedatum in de toekomst, wat betekent dat de berichtstatus toekomstig is.

U kunt dit probleem omzeilen door de volgende argumenten te gebruiken:

$args = array("post_type" => "gebeurtenis", "post_status" => "toekomst");

Met deze code kunt u de gebeurtenissen weergeven die nog niet hebben plaatsgevonden, omdat de publicatiestatus wordt gebruikt voor gepubliceerde vermeldingen. Maar als u gebeurtenissen wilt weergeven die hebben plaatsgevonden, moet u een array gebruiken die meer dan één status bevat:

$args = array("post_type" => "gebeurtenis", "post_status" => array("toekomst", "publiceren"));

De parameter post_status is belangrijk bij het opvragen van bijlagen, omdat de status overnemen is in plaats van publiceren. Om alle bijlagen op te vragen, kunt u de volgende code gebruiken:

$args = array("post_type" => "bijlage", "post_status" => "erven");

Maar u kunt overnemen vervangen door elke andere status die een soortgelijk resultaat oplevert.

Sorteeropties

Er zijn twee parameters die kunnen worden gebruikt om records te sorteren die zijn verkregen met WP_Query: order en orderby. Zoals u al heeft begrepen, bepaalt volgorde de volgorde waarin de records in de lus worden weergegeven, en bepaalt volgorde op op welk veld in de database ze worden gesorteerd.

bestelparameter

Er zijn alleen argumenten die u kunt gebruiken voor het sorteren:

ASC: oplopend (1, 2, 3; a, b, c).
DESC: aflopend (3, 2, 1; c, b, a).

Als je geen argument voor de volgorde opgeeft, zal WordPress standaard DESC gebruiken.

orderby-parameter

U kunt records op verschillende velden sorteren:

  • geen: geen sorteervoorwaarden ( beschikbaar vanaf versie 2.8);
  • ID: sorteer op bericht-ID. Vergeet hoofdletters niet;
  • auteur: sorteer op auteur;
  • titel: sorteer op titel;
  • naam: sorteer op slug-invoer;
  • type: sorteer op berichttype;
  • datum: sorteren op datum;
  • gewijzigd: sorteer op datum van laatste wijziging;
  • ouder: sorteer op ID van het bovenliggende bericht/pagina;
  • rand: willekeurige volgorde;
  • comment_count: sorteer op aantal reacties;
  • menu_order: sorteer op paginavolgorde. Meestal gebruikt voor pagina's ( hier wordt de waarde gebruikt die is opgegeven in het metablok bij het bewerken van de pagina), evenals voor bijlagen ( gebruikt het gehele getal uit het dialoogvenster Media invoegen/laden). Kan ook worden gebruikt voor elk berichttype waarbij menu_order is ingeschakeld;
  • meta_value: sorteer op metasleutelwaarde of aangepaste waarde;
  • velden: Werkt alleen als de parameter meta_key is ingesteld. Metawaarden worden alfabetisch gesorteerd in plaats van numeriek ( dat wil zeggen dat 34 vóór het getal 4 wordt afgedrukt);
  • meta_value_num: Sorteer op numerieke metawaarde. Net als bij meta_value moet het argument meta_key in het verzoek worden gebruikt;
  • post__in: slaat de sortering op op post-ID's die zijn ingesteld in de post__in-array.

Standaard wordt het datumveld gebruikt voor het sorteren. Dat wil zeggen, het is gesorteerd op publicatiedatum.

Als u records in aflopende volgorde op titel wilt sorteren, kunt u de volgende argumenten gebruiken:

$args = array("orderby" => "titel", "order" => "ASC");

Sorteren op meerdere velden

Om records op meerdere velden te sorteren, moet u een array gebruiken met de parameter orderby, en met de parameter order als u wilt dat elk veld in een andere volgorde wordt gesorteerd.

Stel dat u een aangepast veld met de naam 'beoordelingen' heeft dat u wilt gebruiken voor het sorteren in een online winkel. Je kunt sorteren op oplopende beoordeling en vervolgens op titel met behulp van de volgende code:

$args = array("orderby" => array("meta_value_num", "title"), "order" => "ASC", "meta_key" => "rating");

Ik heb een meta_key-argument in het verzoek opgenomen en hierdoor weet WordPress welk aangepast veld we gebruiken. Dit is juist nodig omdat WordPress post-metagegevens opslaat in de wp_postmeta-tabel, en niet in wp_posts.

Maar wat als u wilt sorteren op beoordeling in aflopende volgorde en vervolgens op titel in oplopende volgorde? In dit geval moet u een andere array gebruiken:

$args = array("orderby" => array("meta_value_num", "title"), "order" => array("DESC", "ASC"), "meta_key" => "rating");

Je kunt ook op meerdere velden sorteren als je geen metagegevens van berichten wilt gebruiken. Als je berichten bijvoorbeeld wilt sorteren op type en vervolgens op datum, kun je de volgende code gebruiken:

$args = array("orderby" => array("type", "datum"), "order" => array("ASC", "DESC"));

Deze code sorteert in oplopende volgorde op berichttype en vervolgens, binnen elk berichttype, op datum in aflopende volgorde.

Pagineringsopties

We gaan verder met een andere set parameters, die verband houdt met de pagina-voor-pagina weergave van inhoud, met paginering. Deze parameters helpen bepalen hoeveel records worden opgevraagd en hoe paginering zal plaatsvinden.

De volgende opties zijn beschikbaar:

  • geen pagina's ( Booleaans): toon alle berichten of gebruik paginering. De standaardwaarde is 'vals', dat wil zeggen dat er pagina-uitvoer wordt gebruikt;
  • berichten_per_pagina ( int): aantal records per pagina;
  • posts_per_archive_page (int): aantal records per pagina, maar alleen op de archiefpagina;
  • verschuiving ( int): aantal records waarna de uitvoer begint;
  • opgeroepen ( int): pagina in het archief waarvan pagina's zijn afgeleid;
  • pagina ( int): Aantal pagina's voor een statische startpagina. Toon berichten die normaal gesproken alleen op pagina X zouden moeten verschijnen als de statische startpagina is ingeschakeld ( Voorpagina);
  • negeer_sticky_posts (booleaans): negeer bijgevoegde berichten. De standaardwaarde is false .

Aantal vermeldingen en overgeslagen vermeldingen

Gebruik de volgende code om de vijf meest recente berichten weer te geven:

$args = array("posts_per_page" => "5");

Toont de vijf meest recente inzendingen, exclusief de meest recent gepubliceerde:

$args = array("posts_per_page" => "5", "offset" => "1");

Houd er rekening mee dat, ook al haalt u records uit de laatste zes records in de database, u nog steeds gebruik maakt van 'posts_per_page' => '5', aangezien dit het aantal records is dat moet worden weergegeven.

U kunt twee query's maken: één om de meest recente vermeldingen weer te geven, en een tweede om nog tien vermeldingen weer te geven, met uitzondering van die vermelding:

Om alle berichten weer te geven kun je posts_per_page gebruiken:

$args = array("posts_per_page" => "-1");

Bijgevoegde berichten

Normaal gesproken worden vastgezette berichten als eerste weergegeven in elke zoekopdracht. Als u deze instelling wilt overschrijven, gebruikt u de parameter negeer_sticky_posts:

$args = array("posts_per_page" => "5", "ignore_sticky_posts" => waar);

Met de bovenstaande argumenten worden de laatste vijf vermeldingen opgehaald, ongeacht of deze zijn bijgevoegd of niet.

Als je alleen bijgevoegde berichten wilt weergeven, moet je de functie get_option() en het argument post__in als volgt gebruiken:

$sticky = get_option("sticky_posts"); $args = array("posts_per_page" => "5", "post__in" => $sticky);

Met de bovenstaande code worden de laatste vijf bijgevoegde berichten opgehaald. Als er minder dan vijf zijn (bijvoorbeeld drie), wordt alleen het beschikbare aantal bijgevoegde records weergegeven.

Paginering in archieven

U kunt ook pagineringsopties gebruiken om te bepalen hoe opgehaalde vermeldingen over meerdere archiefpagina's of zoekpagina's worden verdeeld.

De volgende code kan bijvoorbeeld op een archiefpagina worden gebruikt om 20 items per pagina weer te geven:

$args = array("posts_per_archive_page" => "20");

Opmerking: het argument posts_per_archive_page overschrijft posts_per_page .