Mastering WP_Query En introduktion

Som standard kör WordPress en fråga på varje sida som din webbplats visar, vars karaktär bestäms av vilken typ av sida som visas. Så om en statisk sida ses, kör WordPress en fråga för att visa sidan med relevant ID, medan om en arkivsida ses, kommer frågan att hämta alla inlägg i det arkivet.

Men ibland vill du göra saker lite annorlunda. Endera i sidans huvudinnehåll eller någon annanstans på sidan (som i sidofältet eller sidfoten) kan du visa vissa specifika innehåll som inte matas ut av standardfrågan.

Den stora nyheten är att WordPress gör det möjligt med WP_Query klass. Denna klass ger dig ett stort antal parametrar som du kan använda för att definiera vilket innehåll du vill skriva ut (vilket inte behöver begränsas till inlägg) och sedan skriva en loop som visar innehållet exakt som du vill.

I denna nitton-deliga serien om Mastering WP_Query, Baris Unver och jag tar dig genom ins och outs av WP_Query så att när du har avslutat serien kan du använda den i en mängd olika scenarier och finjustera hur WordPress frågar uppgifterna i din webbplatss databas.

I denna introduktion täcker jag följande:

  • Vad är WP_Query?
  • Varför använda WP_Query?
  • Potentiella problem / vad man ska vara medveten om.

Vad är WP_Query?

WP_Query är en klass som tillhandahålls av WordPress. Att det är en klass betyder att du snabbt kan komma åt variablerna, kontrollerna och funktionerna som har kodats in i den klassen i WordPress-kärnan, utan att behöva oroa dig för att skriva all den koden själv. Detta gör din kod mer effektiv och pålitlig.

Om du vill förstå exakt hur WP_Query fungerar under huven, du kan se sin kod i includes / query.php fil.

WP_Query består av fyra huvuddelar:

  • Argumenten för frågan, med parametrar som kommer att beskrivas i detalj i denna serie
  • själva frågan
  • slingan, som kommer att producera efter innehåll, titlar eller vad du vill visa
  • avslutas: stänger om och under taggar och återställer postdata

I praktiken kommer det att se ut som följande:

have_posts ()) // Starta looping över sökresultatet. medan ($ query-> have_posts ()) $ query-> the_post (); // Innehållet i de efterfrågade postresultaten går här.  // Återställ ursprungliga postdata. wp_reset_postdata (); ?>

Du kan definiera dina argument när du skriver själva frågan, men jag föredrar att definiera dem först, eftersom det håller sakerna snyggt.

Återställ postdata

I exemplet ovan har jag lagt till wp_reset_postdata () efter varje fråga. Detta är viktigt eftersom det återställer frågan tillbaka till huvudfrågan som körs på den sidan. 

Till exempel, om du använder WP_Query att köra en fråga i sidofältet med wp_reset_postdata () säger effektivt till WordPress att vi fortfarande är på vilken sida som helst, och att den ska fungera med standardfrågan för den sidan. 

Om du inte gör det kan eventuella andra frågor som körs på sidan (inklusive standardfrågan) brytas och eventuella villkorade taggar som kontrollerar vilken typ av sida som visas kommer inte att fungera.

Varför använd WP_Query?

Om du inte har använt WP_Query klass innan, kanske du undrar varför du bör börja. Här kommer jag att fokusera på två aspekter av detta: varför använda WP_Query över andra metoder för att skriva anpassade frågor och scenarier där du kanske vill använda WP_Query.

Varför använd WP_Query över andra metoder?

WP_Query är inte den enda metoden för att skapa en anpassad fråga. Det finns fyra fler:

  • pre_get_posts
  • get_posts ()
  • get_pages ()
  • query_posts () (som du borde undvika, som jag förklarar)

Jag tänker inte gå in på mycket detaljer om hur vart och ett av dessa fungerar, men det är bra att veta när de används:

  • pre_get_posts är en krok som ändrar huvudfrågan. Du kan använda den med en villkorlig kod för att kontrollera om en viss typ av sida visas (till exempel hemsidan) och använd sedan den för att ändra den fråga som körs (till exempel för att ta bort de senaste tre inläggen, om du " visa dem på annat håll på sidan). Det är ett mycket effektivt sätt att ändra huvudfrågan och bör vara din första anknytningshamn om det är vad du vill göra. Men du kan inte använda den för att skapa en helt ny fråga.
  • get_posts () och get_pages () är mycket lika, med den största skillnaden som är uppenbart från deras namn. Dessa malltaggar använder faktiskt WP_Query klass, så de är ett annat sätt att göra samma sak, men lägg till ett extra steg eftersom de kallar WP_Query klass istället för att du gör det direkt. Du kan bara använda dem för att fråga antingen inlägg eller sidor, medan WP_Query sig själv är kraftfullare och låter dig fråga nästan vad som helst i din databas.
  • query_posts () Ändrar huvudfrågan men bör inte användas i plugin eller teman. Detta beror på att det slänger huvudfrågan och börjar om igen, och ersätter huvudfrågan med en ny fråga. Det är också benäget för fel, särskilt vid pagination, och är ineffektivt och kommer att påverka sidbelastningstiderna. Om du behöver ändra huvudfrågan använder du pre_get_posts istället, och om du vill skapa en helt ny fråga, använd WP_Query.

Diagrammet nedan, släppt av Andrey "Rarst" Savchenko under Creative Commons licens, ger en viss känsla av detta:

När du kan använda WP_Query

Det finns många scenarier när WP_Query kommer att komma till nytta, och jag kan inte täcka dem alla här, men här är en översikt:

  • För att lägga till en lista över relaterade inlägg under den aktuella posten, till exempel en lista över alla inlägg i samma kategori.
  • Skapa två loopar på samma sida: till exempel en FAQ-sida med frågetitlarna överst och innehållet nedan.
  • För att skapa en anpassad lista över senaste inlägg i sidfältet eller sidfoten på din webbplats, när widgeten Senaste inlägg inte gör vad du behöver (eller du vill hellre själv koda det).
  • För att skapa anpassade frågor för taxonomier använder du mer än en taxonomi för att definiera vad som visas.
  • Att fråga posttyper som inte matas ut av standardfrågan, till exempel bilagor.
  • Att skapa anpassade sidor med ett antal frågor för olika innehållstyper, som jag har gjort på det här exemplet för en klient.

Några tillvägagångssätt

De WP_Query klassen är stor. Jag skapar många webbplatser som behöver egna frågor, så jag använder det ofta. Men det kommer inte utan dess nackdelar. Här är några saker du bör vara medveten om:

  • Om allt du vill göra är att ändra hur inlägg visas för en viss innehållstyp eller arkiv, använd inte WP_Query. I stället skapar du helt enkelt en mallfil för det arkivet eller innehållstypen och ändrar loopen i den mallfilen.
  • Om du vill visa några fler eller mindre inlägg än vad som normalt skulle visas på en arkivsida (till exempel inte visa en viss kategori), använd inte WP_Query för att skapa en helt ny fråga. Använd istället pre_get_posts att ändra huvudfrågan, tillsammans med en villkorlig kod för att avgöra var exakt du vill göra det.
  • Akta dig för att springa för många frågor på en sida. Du kan teoretiskt skapa en sida med hundratals anpassade frågor, men tänk bara på serverbelastningen. Om du behöver mer än fyra eller fem frågor på en sida kanske du vill överväga att skapa extra sidor.

Sammanfattning

De WP_Query klassen är ett kraftfullt och extremt användbart verktyg för att skapa egna frågor och göra ditt WordPress-webbplats att uppträda precis som du vill ha det. Som vi har sett finns det tillfällen när du skulle använda andra metoder för att skapa egna frågor, men det har ett brett utbud av användningsområden.

I resten av denna serie tar vi dig igenom detaljerna om hur du använder WP_Query och få ut det mesta av det.