Mastering WP_Query Relaterade funktioner

Hej och välkommen till den andra delen av serien "Mastering WP_Query". I första delen började vi med serien genom att helt enkelt introducera vad WP_Query klassen är. Och i den här andra delen kommer vi att lära oss om de funktioner som är relaterade till WP_Query.

Låt oss börja!

Använda WP_Query Power med funktioner, åtgärder och filter

Jag är ingen expert på programmering, men jag kan se att WP_Query klassen är ett av de bästa exemplen på MVC-mönstret. Det är extremt kraftfullt, helt utdragbart och mycket lätt att använda när du läser grunderna.

Förutom dess egenskaper, metoder och parametrar (som vi ska gå igenom i framtiden), erbjuder WordPress extrafunktioner och krokar (vilket betyder åtgärder och filter) för att arbeta med WP_Query klass. I denna handledning kommer vi lära känna funktionerna och i nästa del ser vi åtgärder och filter relaterade till WP_Query. Om du ser att jag har glömt något, var snäll att meddela mig genom att skicka en kommentar.

WP_Query relaterade funktioner

Det finns 13 WordPress-funktioner som fungerar med WP_Query klass som kan hjälpa dig att utnyttja kraften i WP_Query. De behöver inte någon introduktion, så här går vi:

Komma med offentliga sökvariabler: get_query_var ()

Vår första funktionens namn talar för sig själv, verkligen: Det tar det globala $ wp_query objekt och hämtar en allmän variabel förfrågan från den. Den har två parametrar: Den första är variabeln för att returnera sitt värde och den andra är ett standardvärde att returnera om variabeln inte är inställd:

Påverka Main Loop: query_posts ()

För att vara ärlig är det här en dålig fungera. Du behöver verkligen inte använda det, men för att säga "rätt väg" kommer vi att gå över det och berätta att det är "fel väg".

query_posts () är en funktion som ändrar huvudfrågan genom att lägga huvudfrågan åt sidan och köra en ny fråga - och du måste använda wp_reset_query () att städa upp efter det.

Denna funktion är en av de mest missbrukade funktioner i kärnan i WordPress. Du bör inte använda den för att skapa sekundära frågor - du kan använda WP_Query klass eller get_posts () funktion (som vi kommer att prata om senare i denna handledning). Du bör inte använda den för att ändra huvudfrågan heller, du borde använda pre_get_posts åtgärd (som vi kommer att prata om senare också). Även Codex avskyr oss från att använda det och visar alternativ.

Bottom line: Använd inte den.

Få ett enda inlägg: get_post ()

En annan självförklarande funktion är get_post (), som du använder för att få ett enda inlägg. Den har tre valfria parametrar:

  • Den första är post-id (eller ID för det aktuella inlägget som standard).
  • Den andra är typen av resultat du får: antingen OBJEKT, ARRAY_A (en associativ array) eller ARRAY_N (en numerisk array).
  • Den tredje är valet att filtrera resultatet. Standard är 'rå' så det filtreras inte om du inte ställer in det 'redigera', 'visa', 'attribut' eller 'Js'.

Spara frågor till arrayer: get_posts ()

De get_posts () funktionen tillåter oss att springa frågor och spara dem som arrays att använda på olika ställen. Det kräver samma argument med WP_Query så du kan anpassa frågan som du vill. (Vi får läsa om WP_Queryparametrar i framtiden, så håll dig stillad!) Det är det bästa och mest effektiva sättet att skapa postlistor men inte loopar.

 'nyheter', 'order' => 'ASC', 'orderby' => 'post_title', 'posts_per_page' => -1); // Återgå en uppsättning av alla inlägg i kategorin "nyheter". $ all_posts_list = get_posts ($ args); ?>

Även om denna funktion kan användas för att köra "sekundära frågor" utan problem, rekommenderar Codex att använda WP_Query när du skapar flera loopar och använder get_posts () när man hämtar en postlista. Peter R. Knight förklarar skillnaden mellan get_posts () och WP_Query i enkla termer: Den största skillnaden är det WP_Query gör fler databasfrågor (postdata, metadata, författardata och kommentardata) medan get_posts () gör bara en fråga (postdata).

Få sidor: get_pages ()

Detta udda funktionen syftar till att hämta en lista med sidor, även om den har en post_type parameter som också kan låta dig välja en annan posttyp (förutsatt att posttypen är hierarkisk, annars returnerar den falsk).

 'ASC', 'sort_column' => 'post_title', 'hierarchical' => 1, 'exclude' => ", 'inkludera' =>", 'meta_key' => ", 'meta_value' =>", "författare '=> ",' child_of '=> 0,' parent' => -1, 'exclude_tree' =>", 'nummer' => ", 'offset' => 0, 'post_type' => 'sida' 'post_status' => 'publicera'); $ pages = get_pages ($ args);?>

Den accepterar argument som mycket liknar WP_Querys argument, men de är lite annorlunda:

  • sorteringsordning: Om du vill sortera sidorna i en stigande (asc) eller nedåtgående (desc) ordning.
  • sort_column: Så här sorterar du sidorna. accepterar Post titel, menu_order, post_date, post_modified, ID, post_author, och POST_NAME.
  • hierarkisk: Om du vill lista sidor hierarkiskt (1) eller inte (0).
  • utesluta: En kommaseparerad lista eller en rad sididentifikatorer som ska uteslutas från listan.
  • inkludera: En kommaseparerad lista eller en rad sididentifikatorer som ska inkluderas i listan och utesluta allt annat.
  • meta_key: När den används med meta_value argument, det innehåller bara sidor som har den definierade metatangenten och värdet.
  • meta_value: När den används med meta_key argument, det innehåller bara sidor som har den definierade metatangenten och värdet.
  • författarna: En kommaseparerad lista över författar-ID.
  • Barn till: Ett ID för en sida för att hämta endast sina barn och barnbarn i noteringen.
  • förälder: Lista de sidor som har det angivna sid-id som förälder. För att detta argument ska kunna fungera, hierarkisk argument måste vara inställt på 0.
  • exclude_tree: En kommaseparerad lista eller en rad sididentifikatorer för att utesluta med sina barn.
  • siffra: Antal sidor att hämta.
  • offset: Antal sidor som ska hoppa överst.
  • post_type: Posttypen för att fråga. Naturligtvis är det som standard sida.
  • post_status: En kommaseparerad lista över posttypstyper som ska inkluderas.

Kontrollera om frågan returnerar inlägg: have_posts ()

Utan att acceptera några parametrar returnerar den här funktionen helt enkelt SANN om frågan returnerar några poster och FALSK om inte.

Arbeta Loop: stolpen()

Codex säger att det "iterates postindex i Loop". Det gör flera saker:

  1. Den hämtar nästa post från frågan.
  2. Det sätter upp $ post data.
  3. Det ställer in i slingan parameter till SANN.

Inställning $ post: setup_postdata ()

Denna funktion talar också för sig själv: Den sätter upp de globala postdata. Låt oss se vad Codex säger om den här:

setup_postdata () fyller de globala variablerna $ id, $ authordata, $ currentday, $ currentmonth, $ page, $ sidor, $ multipage, $ more, $ nummrar, som hjälper många mall-taggar att fungera i det aktuella inlägget. Det tilldelar inte den globala $ post variabel men verkar förvänta sig att dess argument är en referens till det.

Rensa nuvarande loop: rewind_posts ()

Ännu en funktion vars namn anger sin funktionalitet: Den här funktionen "återvinner" Loop så att du kan köra den igen senare.

Återställning $ postwp_reset_postdata ()

Den här funktionen återställer den globala $ post Variabel tillbaka till det första inlägget i huvudfrågan. Det är bättre att använda den här efter en sekundär fråga.

Återställningen av frågan: wp_reset_query ()

Den här ska användas om huvudfrågan ändras (med query_posts () funktion eller pre_get_posts åtgärd som vi ser i nästa del) så att huvudfrågan kan återställas.

Kontrollera om aktuell sökning är huvudfrågan: is_main_query ()

Den här är en villkorlig etikett som returnerar SANN om den aktuella frågan är huvudfrågan och FALSK om det inte är det. Enkelt, rätt?

Kontrollera om vi är i loop: i slingan()

En annan villkorlig tagg är i slingan() som bara återvänder SANN eller FALSK om din kod körs inuti Loop eller inte.

Slutet av del två

Där går du - nu vet du (förmodligen) alla funktioner relaterade till WP_Query! Håll dig klar för nästa del där vi lär dig mer om WP_Query relaterade åtgärder och filter.

Har du några kommentarer eller något att lägga till i den här delen? Gärna dela dina tankar genom att kommentera nedan. Och om du gillade artikeln, glöm inte att dela den med dina vänner!