Hittills i denna serie har du lärt dig ett urval av argument du kan använda med WP_Query
klass, för att välja inlägg per posttyp, kategori, tagg, metadata, datum, status och mycket mer.
I den här sista handledningen på WP_Query
argument, jag kör igenom några mindre vanliga parametrar som kan ge dina frågor ännu större flexibilitet.
Parametrarna vi täcker här är för:
Innan vi börjar, låt oss få en snabb sammanfattning om hur du kodar dina argument med WP_Query
.
När du kodar WP_Query
i dina teman eller plugins måste du inkludera fyra huvudelement:
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 (); ?>
Argumenten är vad som säger WordPress vilka data som hämtas från databasen och det är de som jag täcker här. Så allt vi fokuserar på här är den första delen av koden:
$ args = array (// Arguments for your query.);
Som du kan se finns argumenten i en array. Du lär dig hur du kodar dem när du arbetar genom den här handledningen.
Det finns ett visst sätt att koda argumenten i arrayen, vilket är enligt följande:
$ args = array ('parameter1' => 'värde', 'parameter2' => 'värde', 'parameter3' => 'värde');
Du måste bifoga parametrarna och deras värden i enskilda citattecken, använd =>
mellan dem och separera dem med ett komma. Om du får fel kan WordPress inte lägga till alla dina argument på frågan eller du kan få en vit skärm.
Det finns fyra parametrar du kan använda för att fråga efter författare:
författare
(int): använd författar-IDförfattarens namn
(sträng): använd 'användarnamn' (ej namn)author__in
(array): använd författar-IDauthor__not_in
(array)Den första, författare
, låter dig fråga inlägg av en eller flera författare, genom att tillhandahålla författarens ID:
$ args = array ('author' => '2');
Koden ovan frågar alla inlägg av författaren vars ID är 2
.
Du kan också använda en sträng för att fråga inlägg av mer än en författare:
$ args = array ('author' => '1, 2');
Om du ville fråga med namn skulle du använda författarens namn
parameter:
$ args = array ('author_name' => 'rachelmccollin');
Denna parameter tar värdet från user_nicename
fält i databasen som dess argument, som visas som smeknamn på användaradministrationsskärmen:
Observera att eftersom detta är redigerbart av användare, är du säkrare att använda författare
parameter om du tror att dina användare kan ändra det.
Du kan också fråga efter inlägg av en rad författare:
$ args = array ('author__in' => array ('1', '2'));
Ovanstående kommer att fråga för inlägg av två författare: de med ID 1
och 2
, vilket ger dig samma resultat som strängen som jag använde med författare
parameter ovan.
Slutligen kan du utesluta inlägg av en eller flera författare som använder author__not_in
parameter. Argumentet under frågor för alla inlägg utom de av författaren 1
:
$ args = array ('author__not_in' => array ('1'));
Eller du kan utesluta flera författare:
$ args = array ('author__not_in' => array ('1', '2'));
Alternativt kan du använda författare
parameter och använd ett minustecken framför författarens ID för att utesluta en författare:
$ args = array ('author' => '-2');
Det finns bara en parameter för sökning, vilket är s
. Använd den för att fråga efter inlägg som matchar en sökterm. Så till exempel för att fråga efter inlägg som innehåller sökorden min favoritmat, skulle du använda det här:
$ args = array ('s' => 'min favoritmat');
Det kan hända att du kan söka efter relaterade inlägg med liknande sökord, till exempel.
Du kan använda de två lösenordsparametrarna för att fråga inlägg med och utan lösenordsskydd:
has_password
(bool)post_password
(sträng)Den första parametern, has_password
, låter dig fråga efter inlägg med eller utan lösenordsskydd. Så att fråga efter inlägg som är lösenordsskyddade:
$ args = array ('has_password' => true);
Och för inlägg som inte har lösenord:
$ args = array ('has_password' => false);
Du kan även fråga med själva lösenordet med hjälp av post_password
parameter:
$ args = array ('post_password' => 'mypassword');
Det finns bara en parameter tillgänglig för behörigheter, perm
, som du använder för att fråga inlägg som den nuvarande användaren har tillstånd att läsa. Det tar 'läsbar'
värde och är utformat för att kombineras med andra argument.
Så att fråga lösenordsskyddade inlägg och visa dem endast om användaren har rätt behörigheter, skulle du använda det här:
$ args = array ('has_password' => true, 'perm' => 'läsbar');
Eller om du vill visa utkastsposter om den nuvarande användaren har behörighet att visa dem, använder du det här:
$ args = array ('post_status' => 'draft', 'perm' => 'läsbar');
Det finns tre cache-parametrar som förhindrar att data som hämtas av frågan läggs till i cacheminnet:
cache_results
(boolean): postinformation cacheupdate_post_meta_cache
(boolean): posta meta information cacheupdate_post_term_cache
(boolean): posttidsinformation cacheStandardvärdet för alla tre är Sann
: Du behöver inte använda dem om du vill att data ska läggas till cacheminnet.
Så att visa alla inlägg i produkt
posttyp men inte lägga till postinformation till cachen, skulle du använda det här:
$ args = array ('post_type' => 'product', 'cache_results' => false);
Normalt bör du inte använda dessa parametrar, eftersom det är bra att lägga till postdata i cacheminnet. Men du kanske ibland vill hämta inlägg så att du bara kan använda några av postdata, i vilket fall du inte behöver resten av postdata i cacheminnet. Ett exempel kan vara när du bara vill skriva ut en lista med posttitlar med länkar, i vilket fall du inte behöver posttidsdata eller metadata som ska läggas till i cacheminnet:
$ args = array ('post_type' => 'product', 'update_post_meta_cache' => false, 'update_post_term_cache' => false);
Du kan använda fält
parameter för att ange vilka fält som ska returneras från din fråga. Detta kan spara tillbaka data från fält i databasen som du inte behöver när du matar ut data i din loop.
Standard är att returnera alla fält, men du har två alternativ med fält
parameter för att begränsa detta. Först, det 'ids'
argument:
$ args = array ('fields' => 'ids');
Detta skulle bara returnera en rad post-ID och inga andra fält. Om du vill skriva ut någonting i din loop (till exempel posttiteln) måste du då använda funktioner som get_the_title ($ post-> ID);
att skriva ut titeln, vilket skulle vara ett långvarigt sätt att gå på saker.
Det andra argumentet du kan använda hämtar en associativ grupp av post-ID med barnpost-ID:
$ args = array ('fields' => 'id => förälder');
Du skulle använda detta för att fråga efter inlägg enligt dina andra argument plus deras barn.
Den här delen av serien på WP_Query
introducerar den slutliga uppsättningen parametrar för WP_Query
klass. Du kan använda dessa för att fråga inlägg av författare, lösenordsskyddad status eller själva lösenordet och sökord och för att ange huruvida resultaten av frågan läggs till cachen och vilka fält som returneras av frågan.
I nästa del av denna serie ser du några exempel på att använda WP_Query
i dina teman eller plugins.