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:
WP_Query
?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:
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.
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.
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
.
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:
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:
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:
WP_Query
. I stället skapar du helt enkelt en mallfil för det arkivet eller innehållstypen och ändrar loopen i den mallfilen.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.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.