WP_Query gebruiken in WordPress. #3 Laten we berichten sorteren op het aantal reacties. Een exemplaar van de klasse en query's voor berichten maken

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

Bestaat speciale manier argumenten in een array instellen:

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

Het is noodzakelijk om de parameters en hun waarden in te sluiten enkele aanhalingstekens, en gebruik ook => ertussen. 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 maken van query's 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.

Met behulp van het BETWEEN-argument en een array kunt u ook records vinden waarvan de aangepaste velden waarden gebruiken bepaald bereik:

$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 versie 4.1 werd het mogelijk om meerdere niveaus van geneste arrays te gebruiken om nog complexere en exacte vragen. 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 gebruiken verschillende niveaus in het verzoek. 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 modules Prestashop, waarmee u productpagina's kunt verbeteren en het aantal conversies kunt verhogen. In dit artikel bekijken we de 5 beste SEO-modules.

Selecteert records uit de database op basis van opgegeven criteria. De functies get_posts() en query_posts() en alle andere vragen met betrekking tot het selecteren van berichten uit de tabel wp_posts werken op basis van WP_Query.

Opmerkingen over filters

U kunt de volgende filters gebruiken om rechtstreeks in de SQL-query zelf in te sluiten.

Belangrijk: als de parameter is opgegeven, zullen al deze hooks niet werken!

Filters die zijn geactiveerd voordat het pagineringsverzoek werd ingesteld:
  • - wijzigt SQL "WAAR"
  • posts_join - wijzigt SQL "JOIN"
Filters die worden geactiveerd na het instellen van een pagineringsverzoek:
  • - wijzigt SQL "WHERE" tijdens paginering
  • posts_groupby - wijzigt SQL "GROUP BY"
  • posts_join_paged - wijzigt SQL "JOIN" tijdens paginering
  • posts_orderby - wijzigt SQL "ORDER BY"
  • posts_distinct - wijzigt SQL "DISTINCTROW"
  • post_limits - wijzigt SQL "LIMIT"
  • posts_fields - wijzigt de resulterende tabelvelden
  • post_mime_type (tekenreeks/array)

    Mime-opnametype. Alleen gebruikt voor bijlagen: berichten met het type 'bijlage'.

    Deze optie werkt alleen als de optie post_type = bijlage en post_status = overnemen. Die. Alleen bijlagen kunnen een MIME-type hebben.

    We ontvangen alleen afbeeldingen van welk type dan ook

    $query = new WP_Query(array("post_mime_type" => "afbeelding", "post_type" => "bijlage", "post_status" => "erven",));

    Wij ontvangen alleen GIF-afbeeldingen

    $query = new WP_Query(array("post_mime_type" => "afbeelding/gif", "post_type" => "bijlage", "post_status" => "erven",));

    Wij ontvangen alle soorten bijlagen, behalve afbeeldingen

    $query = new WP_Query(array("post_mime_type" => array("application", "text", "video", "audio"), "post_type" => "bijlage", "post_status" => "overnemen", ));

    Opties Statussen

    Haalt berichten op met de opgegeven status.

    Post_status (tekenreeks/array)

    Berichtstatus.

    Standaard staat public en als de gebruiker geautoriseerd is, wordt ook privé toegevoegd. Als het verzoek vanuit het admin-gedeelte wordt gelanceerd, worden ook beschermde statustypen toegevoegd: toekomstig, concept en in behandeling. Alle statustypen:

    • publiceren - gepubliceerd bericht.
    • in behandeling - bericht wordt gemodereerd.
    • ontwerp - ontwerp.
    • auto-concept - een concept dat door WordPress zelf is opgeslagen (auto-save).
    • toekomst - geplande post.
    • privé - persoonlijk bericht.
    • erven - herziening of bijlage.
    • afval - verwijderd bericht(in de winkelwagen). Sinds versie 2.9.
    • any - all statussen, behalve statussen waarvan de parameter 'exclude_from_search=true' specificeert. Zie register_post_status() en get_post_stati() .

    Standaard: "publiceren"

    Berichten op status

    Wij ontvangen alleen concepten:

    $query = nieuwe WP_Query("post_status=draft");

    Wij ontvangen berichten van verschillende statussen:

    $query = new WP_Query(array("post_status" => array("in behandeling", "concept", "toekomst")));

    Wij ontvangen alle soorten investeringen:

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

    Opties Data (tijden)

    Toont berichten die behoren tot bepaalde periode tijd.

    Jaar (nummer) 4 cijfers van het maandnummer van het jaar (2013). (nummer) Maandnummer (1 - 12) w (nummer) Week van het jaar (van 0 tot 53) dag (nummer) Dag van de maand (1 - 31) uur (nummer) Uur (0 - 23) minuut (nummer) Minuut (0 - 60) seconde (nummer) Tweede (0 - 60) m (nummer) JaarMaand (201306) date_query (matrix)

    Parameters waarmee de aanvraag wordt geconfigureerd. Het werkt op basis van een aparte klasse: WP_Date_Query.

    Deze parameter wordt opgegeven als een array, die geneste arrays kan bevatten. Parameters: column , Compare , Relationship voor de hoofdarray werken als standaardparameters voor geneste arrays (indien aanwezig).

      kolom - veld in de database voor de aanvraag. Misschien:
      post_date
      post_date_gmt
      post_gemodificeerd
      post_modified_gmt
      commentaar_datum
      comment_date_gmt
      gebruiker_geregistreerd
      Standaard: "post_date"

      vergelijken: standaardvergelijkingsoperator voor alle geneste matrices. Misschien: Misschien: = , != , > , >= ,< , <= , IN , NOT IN , BETWEEN , NOT BETWEEN .
      Standaard: "="

      relation - operator als er meerdere arrays met datums zijn opgegeven:
      EN (beschouw alle gespecificeerde arrays tegelijkertijd).
      OF (als er overeenkomsten zijn met ten minste één opgegeven array).
      Standaard - OF

      De onderstaande opties moeten worden gebruikt in geneste arrays. Ze definiëren een zoekopdracht voor één datum.

      Ook kunnen alle onderstaande parameters in de hoofdarray worden gebruikt.

      • voor (tekenreeks/array)- Datum van de registraties “tot” die zullen worden ontvangen. Er is een string nodig die de functie strtotime() zal begrijpen: alle mogelijke formaten. Of u kunt een array met indexen doorgeven: year , month , day: array("year"=>"2015", "month"=>"5", "day"=>"28")

        na (tekenreeks/array)- De datum van de stukken “na” die zullen worden ontvangen. Neemt een string die de functie strtotime() zal begrijpen: alle mogelijke formaten. Of u kunt een array met indexen doorgeven: year , month , day: array("year" => "2015", "month" => "5", "day" => "28")
        Ten opzichte van de huidige tijd van de site (niet UTC).

        kolom (lijn)- zie hierboven, alleen voor een specifieke datum. Standaard: bovenste arraywaarde.

        vergelijken (lijn)- zie hierboven, alleen voor een specifieke datum. De standaardwaarde is "=".

        inclusief (logisch)- argumenten ervoor en erna worden inclusief verwerkt als ze waar zijn. Standaard: onwaar.

      • jaar (getal/matrix)- jaar, bijvoorbeeld 2013
      • dag van het jaar (getal/matrix)- nummer van de dag in het jaar, 1-366.
      • maand (getal/matrix)- maand, 1-12
      • week (getal/matrix)- week, 0-53
      • dag (getal/matrix)- dag, 1-31
      • dag van de week (getal/matrix)- dag van de week, 1-7, waarbij 1 zondag is
      • dagvanweek_iso (getal/matrix)- dag van de week, 1-7, waarbij 1 maandag is
      • uur (getal/matrix)- uur, 0-23
      • minuut (getal/matrix)- minuut, 0-60
      • seconde (getal/matrix)- tweede, 0-60

      In de parameters: year , month , week , dayofyear , day , dayofweek , dayofweek_iso , hour , minute , second kunt u meerdere waarden opgeven, in de vorm van een array, als de vergelijkingsparameter overeenkomt.

    #1. Laten we de berichten van vandaag pakken:

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

    #2. Laten we de berichten van de afgelopen week ophalen:

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

    #3. Laten we berichten voor 20 december ophalen:

    $query = nieuwe WP_Query("maandnummer=12&dag=20");

    #4. Laten we berichten ophalen voor de periode van 1 maart tot 15 maart 2010:

    // Creëren nieuwe functie wat zal toevoegen waar staat naar de verzoekfunctie filter_where($where = "") ( // van 1 maart tot 15 maart 2010 $where .= " AND post_date >= "2010-03-01" AND post_date< "2010-03-16""; return $where; } add_filter("posts_where", "filter_where"); $query = new WP_Query($query_string); remove_filter("posts_where", "filter_where");

    De bovenstaande zoekopdrachten leveren berichten op voor een bepaalde periode in de geschiedenis: 'Berichten voor X maand, X dag'. Ze kunnen geen posten ontvangen voor een willekeurige periode in relatie tot het heden. Daarom worden zoekopdrachten als 'Berichten van de afgelopen 30 dagen' of 'Berichten voor vorig jaar" zijn niet mogelijk in de basisversie; voor dergelijke zoekopdrachten moet u het filter "posts_where" gebruiken. Onderstaande voorbeelden laten zien hoe u dit kunt doen.

    #5. Laten we de berichten van de afgelopen 30 dagen bekijken:

    // Maak een nieuwe functie die een waar-voorwaarde toevoegt aan de queryfunctie filter_where($where = "") ( // voor de afgelopen 30 dagen $where .= " AND post_date > "" . date("Y-m-d", strtotime ("-30 dagen ")). """; return $where; ) add_filter("posts_where", "filter_where"); $query = nieuwe WP_Query($query_string); remove_filter("posts_where", "filter_where");

    #6. We ontvangen berichten voor de periode van 30 tot 60 dagen vóór het heden:

    // Maak een nieuwe functie die een Where-voorwaarde toevoegt aan de queryfunctie filter_where($where = "") ( // van 30 tot 60 dagen $where .= " AND post_date >= "" . date("Y-m-d", strtotime("- 60 dagen")) . """ . " AND post_date<= "" . date("Y-m-d", strtotime("-30 days")) . """; return $where; } add_filter("posts_where", "filter_where"); $query = new WP_Query($query_string); remove_filter("posts_where", "filter_where");

    De parameter "m" kan alleen worden ingesteld in de lijst met berichten in het beheerdersdashboard. Dit is handig wanneer u selecteert uit een geselecteerde vervolgkeuzelijst waarbij de datum is ingesteld op het getal JJJJmm.

    Voorbeelden met de parameter date_query

    #1. Laten we berichten ontvangen tussen 9 en 17 uur:

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

    #2. We ontvangen berichten voor de periode: 1 januari tot en met 28 februari:

    Datums kunnen worden opgegeven als getallen of tekenreeksen, omdat de argumenten voor en na worden verwerkt door de PHP-functie strtotime(), die tekenreeksen begrijpt.

    $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);

    #3. Laten we berichten van een jaar geleden publiceren, maar de afgelopen maand 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);

    #4. Laten we berichten van de afgelopen twee weken ophalen met de tekenreeks '2 weken geleden':

    $query = new WP_Query(array("date_query" => array("after" => "2 weken geleden",),));

    #5. Laten we de inzendingen van de afgelopen twee maanden bekijken, gepubliceerd op weekdagen:

    $query = new WP_Query(array("date_query" => array("after" => "2 maanden geleden", array("dayofweek" => array(1, 5), "vergelijk" => "TUSSEN",) ,),));

    Het date_query-argument werkt ook met de klasse WP_Comment_Query, dus het kan op dezelfde manier worden gebruikt in de functie: get_comments() .

    Opties Inspringing

    U kunt een inspringing instellen vanaf het eerste bericht in de queryresultaten. Een standaardverzoek retourneert bijvoorbeeld 6 berichten, maar als u de parameter offset=1 aan hetzelfde verzoek toevoegt, worden er 5 berichten geretourneerd (het eerste bericht van het verzoek wordt overgeslagen).

    Offset (nummer) Hoeveel berichten uit de zoekopdrachtresultaten moeten worden overgeslagen.

    Gebruiksvoorbeeld

    Laten we het eerste/ene bericht overslaan (offset=1) en de volgende 5 retourneren:

    $query = nieuwe WP_Query("posts_per_page=5&offset=1");

    Opties Sorteren en bestellen

    Sorteert en stelt de sorteerrichting in.

    Sorteeropties werken niet als u de parameter field = ids opgeeft, omdat in dit geval de query geen velden bevat waarop u het resultaat kunt sorteren.

    Volgorde (lijn)

    De sorteerrichting op basis van de parameter orderby kan zijn:

    • ASC - in volgorde, van klein naar groot (1, 2, 3; a, b, c).
    • DESC - in omgekeerde volgorde, van groot naar klein (3, 2, 1; c, b, a).
    bestellendoor (lijn)

    Velden waarop u berichten kunt sorteren. Misschien

    • geen - niet sorteren, weergeven zoals in de database. Gelijk aan sorteren op ID. Sinds versie 2.8.
    • ID - sorteer op ID.
    • auteur - sorteren op auteur-ID's.
    • titel - sorteer op titel.
    • naam - op basis van de titel van het bericht (label, berichtslak).
    • datum - sorteer op publicatiedatum.
    • gewijzigd - sorteer op wijzigingsdatum.
    • type - op berichttype (post_type). Vanaf versie 4.0
    • ouder - sorteren op de waarde van het bovenliggende veld.
    • rand - willekeurige volgorde.
    • RAND(x) - willekeurige volgorde voor numerieke waarden. Hier is "x" een geheel getal.
    • comment_count - sorteren op het aantal reacties. Sinds versie 2.9.
    • relevantie - per zoekvoorwaarde (parameters). Het sorteren gebeurt in de volgende volgorde: 1) of de hele zin overeenkomt. 2) alle zoektermen in de berichttitel. 3) eventuele woorden uit de zoekopdracht in de titel van het bericht. 4) de volledige zin is te vinden in de berichtinhoud.
    • menu_order - standaard gebruikt voor pagina's en bijlagen. Het serienummer wordt aangegeven op de berichtbewerkingspagina.
    • meta_value - op basis van de waarde van een aangepast veld.

      Belangrijk: de parameter meta_key moet ook worden gedefinieerd. Opmerking: de sortering zal alfabetisch zijn en zal niet logisch zijn als de waarden van willekeurige velden getallen zijn (het zal bijvoorbeeld 1, 3, 34, 4, 56, 6, enz. zijn, en niet 1, 3, 4, 6, 34, 56).

    • meta_value_num - sorteren op aangepaste velden waarvan de waarden getallen zijn. Sinds versie 2.8.
    • array-sleutel uit meta_query - in dit geval wordt er gesorteerd op de waarde van een aangepast veld dat is opgegeven in de meta_query-array.
    • post__in - houdt rekening met de volgorde van de opgegeven ID's in de post__in parameter. De orderparameter wordt genegeerd.
    • post_name__in - houdt rekening met de volgorde van de opgegeven namen in de parameter post_name__in. De orderparameter wordt genegeerd.
    • post_parent__in - houdt rekening met de volgorde van de opgegeven ID's in de parameter post_parent__in. De orderparameter wordt genegeerd.
    gesorteerd op = array()

    Sinds WordPress 4.0 kun je in orderby een array opgeven die beide parameters combineert: orderby en order . Dit wordt gedaan om op meerdere kolommen tegelijk te sorteren. De syntaxis is als volgt:

    "orderby" => array("title" => "DESC", "menu_order" => "ASC")

    #1 Sorteer op titel

    $query = new WP_Query(array("orderby" => "title", "order" => "DESC"));

    Sorteer op menuvolgorde en vervolgens op titel

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

    #2 Laten we één willekeurig bericht weergeven:

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

    #3 Laten we berichten sorteren op het aantal reacties:

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

    #4 Sorteer producten op prijs (aangepaste veldprijs):

    $query = new WP_Query(array("post_type" => "product", "orderby" => "meta_value", "meta_key" => "prijs"));

    #5 Meerdere sorteringen

    Laten we berichten weergeven gesorteerd op twee velden: "title" en "menu_order" (titel is primair):

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

    #6 Meervoudig sorteren met behulp van een array (vanaf versie 4.0)

    Laten we de pagina's sorteren op titel en menunummer (menu_order) in verschillende volgorde (ASC/DESC):

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

    #7 Sorteren op "meta_value" voor een nieuw berichttype (post_type)

    Laten we berichten van het type "my_custom_post_type" weergeven, gesorteerd op de aangepaste veldsleutel "leeftijd" en gefilterd zodat alleen berichten met veldwaarden 3 en 4 worden weergegeven:

    $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), "vergelijk" => "IN",)));

    $query = nieuwe WP_Query($args);

    Om het resultaat op twee verschillende metavelden te sorteren, bijvoorbeeld eerst op stad en vervolgens op staat, moet u de sleutels voor de arrays in de meta_query-array opgeven en deze sleutels vervolgens in de orderby-parameter gebruiken:

    $query = new WP_Query([ "meta_query" => [ "relation" => "AND", "state_clause" => [ "key" => "state", "value" => "Wisconsin", ], "city_clause " => [ "key" => "stad", "vergelijk" => "BESTAAT", ], ], "orderby" => [ "city_clause" => "ASC", "state_clause" => "DESC", ], ]);

    Opties Paginering

    geen pagina's (logisch) Schakelt paginering uit en geeft alle berichten op één pagina weer. (nummer)

    berichten_per_pagina

    Aantal berichten op één pagina. Als je -1 instelt, worden alle berichten weergegeven (zonder paginering).

    Sinds versie 2.1 vervangt het de showposts-parameter. Stel de wisseloptie in als paginering niet werkt nadat u deze optie hebt gebruikt.

    Let op: als het verzoek in het feedgedeelte staat, overschrijft WP deze parameter met de optie posts_per_rss. Om de weergave van berichten in de feed te beïnvloeden, gebruikt u de filters post_limits of pre_option_posts_per_rss. (nummer) Posts_per_archief_pagina (nummer) Aantal berichten voor archiefpagina's: voor pagina's die voldoen aan de voorwaarden van is_archive() of is_search(). Deze optie overschrijft de opties 'posts_per_page' en 'showposts'.
    gecompenseerd Hoeveel berichten er moeten worden overgeslagen vanaf de bovenkant van de selectie (bovenste streepje). (nummer) Aandacht: (nummer) Als u deze optie instelt, wordt de optie "gepagineerd" overschreven/negerd en wordt de paginering verbroken (het probleem wordt opgelost). (logisch)

    opgepiept

    Paginering paginanummer. Toont berichten die normaal gesproken op de X-pagineringspagina worden weergegeven. Overschrijft de paginaparameter posts_per_page

    Nummer voor statische startpagina. Toont berichten die normaal gesproken op de X-pagingpagina van de statische hoofdpagina (voorpagina) zouden worden weergegeven.

    negeer_sticky_posts

    Negeer sticky berichten of niet (waar/niet waar). Vanaf versie 3.1. Vervangt de parameter caller_get_posts.

    Sticky-berichten verschijnen niet bovenaan de lijst, maar worden niet uitgesloten en verschijnen in de normale volgorde.

    #1 berichten per pagina

    We krijgen 3 berichten:

    $query = nieuwe WP_Query("posts_per_page=3");

    Laten we alle berichten ophalen:

    $query = nieuwe WP_Query("posts_per_page=-1");

    Laten we alle berichten ophalen en paginering uitschakelen:

    $query = nieuwe WP_Query("nopaging=true");

    #2 Bovenvulling

    Laten we berichten beginnen vanaf de vierde (we slaan de eerste 3 over):

    $query = nieuwe WP_Query("gepagineerd=6");

    #4 Berichten van de huidige pagina

    Laten we berichten van de huidige pagineringspagina ophalen. Handig bij het maken van aangepaste paginering:

    $query = nieuwe WP_Query([ "gepagineerd" => get_query_var("gepagineerd") ]);

    Laten we berichten van de huidige pagina ophalen en de paginaparameter instellen op 1 als de variabele niet is gedefinieerd op de eerste pagineringspagina:

    $paged = get_query_var("paging") ? get_query_var("gepagineerd"): 1; $query = nieuwe WP_Query([ "gepagineerd" => $gepagineerd ]);

    Gebruik get_query_var("page") als u het pagineringspaginanummer van de statische voorpagina van de site wilt ophalen - is_front_page() . De paginavariabele bevat in dit geval het pagineringsnummer op berichttypepagina's wanneer de inhoud de pagineringstag gebruikt .

    De huidige pagineringspagina uitvoeren op een statische hoofdpagina:

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

    #5 Vastgezette berichten (berichten)

    # Alle sticky berichten
    $sticky = get_option("sticky_posts"); $query = nieuwe WP_Query(["post__in" => $sticky ]);
    # Alleen het eerste sticky bericht
    $sticky = get_option("sticky_posts"); $query = nieuwe WP_Query("p=" . $sticky);
    # Eerste sticky post, als er geen dergelijke post is, dan de laatste die is gepubliceerd
    $args = array("posts_per_page" => 1, "post__in" => get_option("sticky_posts"), "ignore_sticky_posts" => 1); $query = nieuwe WP_Query($args);
    # Het eerste sticky bericht, als zo'n bericht niet bestaat, tonen we niets
    $sticky = get_option("sticky_posts"); if (! empty($sticky)) ( $query = new WP_Query(array("posts_per_page" => 1, "post__in" => $sticky, "ignore_sticky_posts" => 1)); // genereer de uitvoer... )
    # 5 laatste sticky berichten
    $sticky = get_option("sticky_posts"); // alle Sticky-items rsort($sticky); // sorteer - nieuwe bovenaan $sticky = array_slice($sticky, 0, 5); // haal de eerste 5 $query = new WP_Query([ "post__in"=>$sticky, "ignore_sticky_posts"=>1 ]);

    #6 Sticky berichten verbergen

    Laten we alle sticky posts uitsluiten van het verzoek:

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

    Laten we sticky posts uitsluiten van de categorie. Alle berichten in de categorie worden geretourneerd, maar de vastgezette berichten staan ​​niet bovenaan, ze worden weergegeven als gewone berichten (op datum):

    $query = nieuwe WP_Query([ "ignore_sticky_posts" => 1, "posts_per_page" => 3, "cat" => 6 ]);

    Laten we sticky posts uitsluiten van de categorie. Zal alle berichten in de categorie retourneren, maar sticky berichten worden volledig uitgesloten. Laten we hier ook een regel toevoegen voor correcte paginering:

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

    Opties Opmerkingen

    De berichtcommentaargegevens worden toegevoegd aan het WP_Query-object als het een afzonderlijk bericht is. De onderstaande parameters geven aan hoe opmerkingen in dergelijke gevallen moeten worden ontvangen.

    Reactie_status (lijn) Reactiestatus. (nummer) ping_status (nummer) Ping-status. (getal/matrix)

    reacties_per_pagina

    • Het aantal reacties dat op een individuele reactiepagina moet worden ontvangen. Standaardoptie: commentaren_per_pagina .
    • commentaar_telling
      • Het aantal reacties dat een bericht moet hebben. Vanaf versie 4.9. (nummer) Als u een aantal opgeeft, worden berichten met het opgegeven aantal reacties weergegeven (zoekoperator =).
      • Met de array kunt u een optie opgeven voor het vergelijken van het aantal opmerkingen. U kunt parameters in de array opgeven: (lijn) waarde< , <= . По умолчанию: = .

    Opties - aantal opmerkingen ter vergelijking.

    vergelijken (lijn)- hoe u het aantal reacties kunt vergelijken. Misschien: = , != , > , >= , (logisch) Zoekopdracht
    S Zoek zin. exact true - zoek met de exacte zin die is opgegeven in de parameter s - zonder % toe te voegen aan het einde van de zoekzin in de SQL-query.
    Standaard: onwaar
    S

    zin

    (waar/onwaar)

    Opties true - zoek met de volledige zoekterm, zoals deze is.

    false - de zoekzin wordt opgedeeld in woorden en de zoekopdracht wordt uitgevoerd op basis van de woorden uit de zoekzin.

    Berichten gevonden met de zoekterm: (tekenreeks/array)

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

    • Retourvelden
    • Stelt in welke gegevens het verzoek moet retourneren.
    • Velden
    Welke gegevens moeten worden geretourneerd? Standaard worden ze allemaal geretourneerd. (logisch) ids - retourneert een array met bericht-ID's.
    S

    Opties id=>parent - retourneert een associatieve array [ parent => ID, … ].

    Als u andere parameters invoegt, worden alle velden (standaard) geretourneerd: een array van postobjecten.

    geen_gevonden_rijen exact true - tel het aantal gevonden regels niet. In sommige gevallen kan dit het verzoek versnellen.
    Caching Voegt geen gegevens toe aan de cache bij het uitvoeren van query's. exact Cache_resultaten
    Caching Of berichtinformatie in de cache moet worden opgeslagen. exact Standaard: waar
    Caching update_post_meta_cache exact Of informatie over metagegevens van berichten in de cache moet worden opgeslagen.
    update_post_term_cache
    Of informatie over het koppelen van een bericht aan termen en taxonomieën in het cachegeheugen moet worden opgeslagen.

    lazy_load_term_meta

    Of u termmetagegevens lui wilt laden.

    #2 We zullen 50 berichten weergeven, maar zullen geen metagegevens van berichten aan de cache toevoegen

    $query = nieuwe WP_Query(array("posts_per_page" => 50, "update_post_meta_cache" => false));

    #3 We zullen 50 berichten weergeven, maar zullen geen informatie over berichtvoorwaarden aan de cache toevoegen

    $query = nieuwe WP_Query(array("posts_per_page" => 50, "update_post_term_cache" => false));

    Meestal hoeft u deze functies niet te gebruiken - de cache is noodzakelijk! Deze aanpak kan echter in een aantal gevallen nuttig zijn. Als we bijvoorbeeld een lijst met berichttitels nodig hebben en geen andere informatie over de berichten nodig hebben: noch taxonomieën, noch metagegevens. Door deze informatie niet te laden, kunnen we tijd besparen op onnodige SQL-query's.

    Opmerking: Als de persistente caching-plug-in wordt gebruikt, worden al deze vlaggen standaard op false ingesteld, omdat het niet nodig is om de cache elke keer dat de pagina wordt geladen te vernieuwen.

    Opties Filters (haken)

    onderdruk_filters exact

    Moeten sommige filters (hooks) in de klasse WP_Query worden uitgeschakeld. Als u deze parameter inschakelt, worden alle filters voor het wijzigen van SQL-query's uitgeschakeld, zoals posts_* of comment_feed_* .

    true - schakel de verwerking van de volgende hooks uit:

    Posts_search posts_search_orderby posts_where posts_join posts_where_paged posts_groupby posts_join_paged posts_orderby posts_distinct post_limits posts_fields posts_clauses posts_where_request posts_groupby_request posts_join_request posts_orderby_request posts_distinct_request posts_fields_request post_limits_request posts_clauses_request posts_request posts_results s comment_feed_join comment_feed_where comment_feed_groupby comment_feed_orderby comment_feed_limits init() Activeert een object, stelt alle eigenschapswaarden in op null, 0 of false.

parse_query($query) Ontvangt queryparameters, parseert deze en stelt de basiseigenschappen van de klasse in: $posts , $post_count , $post en $current_post .

  • parse_query_vars() Parseert de oude query opnieuw.
  • get($query_var) Haalt een queryvariabele op naam op.
  • set($query_var, $value) Stelt de queryvariabele in. Geeft aan: de naam van de variabele en de waarde ervan.

&get_posts() Haalt de vereiste berichten op uit de database. Vult ook de eigenschappen $posts en $post_count in.

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 gegevensverwerkingscyclus vanuit de queryresultaten while ($query->have_posts()) ( $query->the_post(); // inhoud van het opgevraagde bericht) ) // herstellen van het origineel gegevens plaatsen 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 een komma. 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 het 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 metasleutel 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 de 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 .

Als u al een tijdje met WordPress werkt, moet u weten hoe moeilijk het vroeger was om lijsten met berichten te maken op basis van een groot aantal criteria en tegelijkertijd te voldoen aan de WordPress-standaarden. Maar het platform heeft de afgelopen jaren een lange weg afgelegd. 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 de WordPress-engine. 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. De interne objecten zorgen zelf voor veel van de problemen, zoals bescherming tegen SQL-injecties en ervoor zorgen dat het juiste gegevenstype wordt gebruikt.

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 het gebruik van SQL-query's in de code vermijden, gebruikt de klasse een associatieve array als argument. Hierdoor krijg je veel voordelen: je kunt argumenten van verschillende plaatsen in de code combineren, een reeks functies uitvoeren en deze op allerlei manieren manipuleren.

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

U kunt alle reguliere functies gebruiken, maar 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 de oorspronkelijke waarde van het object behouden blijft $ 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 (
matrix (
"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 uitstekend 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