Mastering WP_Query 10 Användbara exempel

Nu när vi lärde oss nästan allt om WP_Query klass, det är dags att prova några exempel. I den här delen kommer vi att arbeta med 10 olika scenarier för att utnyttja WP_Query klass och relaterade funktioner.

Det blir en rolig träning och jag hoppas att det blir lika pedagogiskt. Låt oss börja!

En snabb påminnelse om att skapa en loop med WP_Query

Bara för att göra denna artikel förståelig separat från serien "Mastering WP_Query", borde jag göra en nano-handledning om att skapa WordPress-loopar med WP_Query klass.

Det är inte annorlunda än att skapa en vanlig slinga, verkligen. En vanlig WordPress-loop går så här:

Och skapa en slinga med WP_Query klassen har bara några skillnader:

 'nyheter', 'posts_per_page' => 3); $ my_query = nya WP_Query ($ args); om ($ my_query-> have_posts ()) while ($ my_query-> have_posts ()) $ my_query-> the_post (); // Postdata går här.  // Återställ "$ post" -data till det aktuella inlägget i huvudfrågan. wp_reset_postdata (); ?>

Låt oss se skillnaden mellan de två:

  • Vi ställer några argument för vårt WP_Query exempel,
  • Vi instanserade WP_Query klass,
  • Vi lade till $ My_query-> till början av have_posts () och stolpen() funktioner (så de är nu metoderna för WP_Query klass),
  • Och vi återställer data från $ post så det går tillbaka till huvudfrågan.

Nu vet vi hur man skapar en slinga med WP_Query och skillnaden mellan en vanlig slinga och en slinga skapad med WP_Query. Vi kommer inte att skapa loopar i alla exempel (för att hålla handledningen kort och om ämnet), så du kan referera till det här avsnittet om du behöver skapa en loop med exemplen nedan.

Exempel # 1: En författares inlägg i år

Låt oss säga att du vill lista en specifik författares inlägg skrivna under det aktuella året i en särskild "Författarens inlägg i år". En enkel kombination av två WP_Query parametrarna är tillräckliga:

 'John', // Få hans inlägg från det här året. 'år' => $ current_year); // Instantiate new query instance. $ my_query = nya WP_Query ($ args); ?>

Passa den här frågan i en loop och du är bra att gå!

Exempel # 2: "Senaste inlägg från den här kategorin" (förutom den nuvarande posten)

Låt oss säga att du vill skapa en slinga under varje post på sina enskilda inläggssidor och lista de senaste inläggen i kategorin som posten är in. Naturligtvis måste du utesluta det aktuella inlägget om det kan vara ett av de senaste inlägg från den kategorin. Så här skapar du frågan med 'katt' och 'Post__not_in' parameters:

term_id; // Inställningsargument. $ args = array (// Få kategorins inlägg. 'cat' => $ current_post_first_cat_id, // Uteslut aktuellt inlägg. 'post__not_in' => array ($ current_post_id)); // Instantiate new query instance. $ my_query = nya WP_Query ($ args); ?>

För slingan föreslår jag att du skapar tre eller fyra kolumner med post thumbnails ovanför posttitel. Det kommer att se riktigt fint precis under posten och innan kommentarfältet.

Exempel # 3: "Mest populära inlägg" Ordered by Comment Count

WordPress har inte ett inbyggt "post view count" -system, och plugins som tillhandahåller denna funktion är kända för att sakta ner webbplatsen (för varje postvy skriver pluginsna i databasen om och om igen för att spela in vyn counts). Det finns dock en annan typ av mätning för att bestämma vilka inlägg som är mest "populära": räkna kommentarer. Och till skillnad från visningsantal är kommentarantalen redan i databasen - den WP_Query klassen gör det super enkelt att beställa inlägg enligt kommentarräkning:

 'comment_count'); // Instantiate new query instance. $ my_query = nya WP_Query ($ args); ?>

Se hur lätt det här är? Föreställ dig nu att skapa en anpassad sidmall med en loop som kör den här frågan - en sida med "Mest kommenterade inlägg".

Exempel # 4: En enkel skjutreglage

När du använder WordPress för att skapa företagswebbplatser, portföljer eller webbtidningar, har reglaget blivit en "måste-ha" industristandard. Jag är inte riktigt en fläkt av skjutreglage (jag tycker att det är dåligt UX) men webben verkar gilla det, så jag kan inte bara säga nej till mina klienter när jag gör webbplatser för dem. Om de vill ha skjutreglage använder jag en enkel fråga med WP_Query klass:

 'slider', // Hämta en särskild slider-kategori. 'category_name' => 'home-slides', // Hämta alla bilder och paginera inte. 'nopaging' => true); // Instantiate new query instance. $ my_query = nya WP_Query ($ args); ?>

De 'katt' Argument kan användas för att hämta bilder från olika kategorier så att du kan skilja bildgrupper och använda flera reglage på flera sidor. Om du bara använder en skjutreglage på din webbplats kan du ta bort den raden och du är bra att gå.

Exempel # 5: En slumpmässig citat i sidofältet

Om du är angelägen om litteratur eller religiös, kanske du vill ha några av dina favorit citat i sidofältet - det är inte slöseri med utrymme om du använder området med syfte. Så om du kommer att lista en slumpmässig citat i ditt sidofält på varje sidvy kan du använda följande kodstämpel för att skapa posttypen och använd följande fråga för att skapa en slinga i sidofältet:

 "Citat", "offentligt" => sant); register_post_type ('quotes', $ args);  add_action ('init', 'quote_post_type'); // Inställningsargument. $ args = array (// Få "citat" psotyp. "post_type '=>' citat ', // Slumpmässig ordning.' orderby '=>' rand ', // Få bara ett objekt.' posts_per_page '= > 1,); // Instantiate new query instance. $ my_query = nya WP_Query ($ args); ?>

En enkel och elegant lösning.

Exempel # 6: Lista produkter mellan en prisklass

Jag hittade detta exempel på Scribu.net och jag måste säga, det kan vara bäst WP_Query trick i denna handledning. Det är lite mer teknisk än de andra också, eftersom det kan tillämpas på en WordPress-drivlad e-handelswebbplats i detta sammanhang.

Här är kodkoden som du ska använda om du vill lista objekt från en anpassad posttyp för "Produkt" och filtrera resultaten med de anpassade fälten "Pris":

 'produkt', // Ställ in meta-frågan. 'meta_query' => array (array (// Hämta priset "custom". 'key' => 'pris', // Ange prisvärdena. 'value' => array (100, 200) jämfört operatören. 'jämför' => 'MELLAN', // Endast titta på numeriska fält. 'typ' => 'numeriskt',)))); // Instantiate new query instance. $ my_query = nya WP_Query ($ args); ?>

En stor kudos till Silviu-Cristian Burca!

Exempel # 7: En kortnummer för att bädda in inlägg i inlägg

Här är en rolig träning - och vi får också använda Shortcode API! I det här exemplet ska vi skapa en kortnummer som kan bädda in ett inlägg i ett inlägg. (Jag innehöll knappast mig från att namnge kortnummer [Postception].) I följande kodbunt skapar vi en kortkodsfunktion som låter oss bädda in inlägg (eller någon anpassad posttyp) och låter oss välja om hela posten eller bara ett utdrag ska visas:

 $) = array (// Få posttyp ("post" som standard). "post_type" = "true" => $ typ, // Få post genom slug. 'name' => $ slug); // Instantiate new query instance. $ my_query = nytt WP_Query ($ args); // Kontrollera att vi har sökresultat. my_query-> have_posts ()) // Börja skapa markup. $ output = '
'; // Starta looping över sökresultatet. medan ($ my_query-> have_posts ()) $ my_query-> the_post (); // Lägg till titel till utmatning. $ output. = '

'; $ output. = get_the_title (); $ output. = '

'; // Få hela inlägget om '$ full' är sant, annars får du få utdrag om ('true' === $ full) // Lägg till fullständigt innehåll för utmatning. $ output. = '
'; $ output. = get_the_content (); $ output. = '
'; else // Lägg till utdrag till utdata. $ output. = '
'; $ output. = get_the_excerpt (); $ output. = '… '. __ ('Se hela inlägget', 'tutsplus'). '' '; $ output. = '
'; // Sluta generera markup. $ output. = '
'; else // Utmatningsmeddelande för att låta användaren veta att inga inlägg hittades. $ output = '
'; $ output. = '

'. __ ('Inga inlägg hittades.', 'Tutsplus'). '

'; $ output. = '
'; wp_reset_postdata (); returnera $ output; add_shortcode ('embed_post', 'tutsplus_embedded_post_shortcode'); ?>

Exempel # 8: Lista över aktuella schemalagda inlägg (med valfria utdrag)

Här är en idé: Varför visar du inte några "smyg" av dina kommande inlägg till dina besökare? Du kan använda följande funktion för att lista dina schemalagda inlägg med eller utan utdrag efter titlarna:

 * * Användning utan utdrag: * *  * / funktion tutsplus_show_drafts ($ show_excerpts = true) // Setup arguments. $ args = array ('post_status' => 'future', 'nopaging' => true); // Instantiate new query instance. $ my_query = nya WP_Query ($ args); // Kontrollera att vi har sökresultat. om ($ my_query-> have_posts ()) // Börja skapa uppmärkning. $ output = '
'; // Starta looping över sökresultatet. medan ($ my_query-> have_posts ()) $ my_query-> the_post (); // Utkast till utkast efter titel och utdrag (om det är aktiverat). $ output. = '
'; $ output. = '

'. get_the_title (). '

'; $ output. = get_the_title (); $ output. = ''; om ($ show_excerpts) $ output. = '
'; $ output. = get_the_excerpt (); $ output. = '
'; $ output. = '
'; // Sluta generera markup. $ output. = '
'; else // Låt användaren veta att ingenting hittades. $ output = '
'; $ output. = '

'. __ ("Inget hittat", "tutsplus"). '

'; $ output. = '
'; wp_reset_postdata (); returnera $ output; ?>

Exempel # 9: "Inlägg från ett år i dag"

Om din blogg är äldre än ett år, och ditt innehåll är tidlöst (vilket betyder att både en person från 2015 och 2025 kommer att hitta artikeln relevant), kan du lägga till ett avsnitt om "Inlägg från ett år i dag", vilket kan öka dina sidvisningar. Så här gör du det:

 datum ('j'), // månad (1 - 12). 'monthnum' => datum ('n'), // År (minus 1). 'år' => datum ('Y') - 1, // Visa bara ett inlägg. 'posts_per_page' => 1); // Instantiate new query instance. $ my_query = nya WP_Query ($ args); ?>

Använd den här frågan för att skapa en slinga som visar ett enda inlägg från och med förra året.

Exempel # 10: Visa barn på aktuell sida

Du har inget annat än titelsidor för titlar att sätta in på sidan "Tjänster", "Våra arbeten" eller "Min portfölj"? Kanske ett intro stycke, men du har rätt, de sidorna är dömda att vara "platshållare". Det är dock en bra idé att placera undersidor där-kanske ett rutnät med fyrkantiga miniatyrbilder och titlar nedan. Låt oss se vilken fråga vi ska använda när du skapar en sådan sidmall:

 $ current_page_id, // Inaktivera paginering. 'nopaging' => true); // Instantiate new query instance. $ my_query = nya WP_Query ($ args); ?>

Avslutar

Jag hoppas att du njöt av dessa exempel så mycket som jag gjorde när jag förberedde dem. Jag ägnade särskild uppmärksamhet åt att ge varierande exempel både för att vara kul och att gnista din kreativitet.

Om du tänkte på bättre exempel när du läste dessa, eller har frågor, tveka inte att ta en kommentar nedan. Och om du gillade artikeln, glöm inte att dela den med dina vänner!

I nästa del ska vi prata om WP_User_Query, en av syster klasserna av WP_Query. Vi ses då!