Välkommen till tredje delen av vår serie som heter "Mastering WP_Query". I den föregående delen gick vi igenom 13 WordPress-funktioner som är relaterade till WP_Query
klass. I den här delen kommer vi att granska WordPress-krokar (filter och åtgärder) som du kan använda i samband med WP_Query
.
Så, utan vidare, låt oss börja!
I Codex "Filterreferens" finns det 16 WordPress-filter listade under titeln "WP_Query Filters". I det här avsnittet kommer vi att prata om dem. Det kommer att bli en ganska snabb del eftersom de flesta filtren handlar om olika "klausuler" i en databasfråga gjord av WP_Query
klass.
Vi kommer tillbaka till dem, direkt efter att ha gått igenom filtren som inte är relaterade till klausulerna.
found_posts
Med det här filtret kan du ändra antalet hittade objekt utan gränsen som kommer ifrån WP_Query
's posts_per_page
argument.
Detta filter är särskilt användbart för att skapa anpassad pagination. Låt oss se vad Codex säger:
Om du till exempel anger ett anpassat förskjutningsvärde i dina frågor kommer WordPress INTE att dra av förskjutningen från parametern $ wp_query-> found_posts (till exempel om du har 45 användbara inlägg efter en kompensation på 10, ignorerar WordPress offset och ger fortfarande found_posts ett värde på 55).
Är vettigt.
found_posts_query
Antalet hittade objekt beräknas med VÄLJ FOUND_ROWS ()
kommando i MySQL. Med det här filtret kan du ändra det här kommandot till något annat, om du behöver beräkna antalet hittade objekt på ett annat sätt.
posts_request
Om du vill ändra den slutförda SQL-frågan är det här filtret du ska använda. Det överträffar i princip hela SQL-frågan som komponeras av WP_Query
klass.
posts_results
Om du vill ändra PHP array
den där WP_Query
genereras med SQL-frågan kan du använda det här filtret. Det finns ett snyggt exempel på Codex så att du kan se hur det fungerar.
(Observera att detta filter hanterar rå array som genereras från SQL-frågan.)
the_posts
Till skillnad från posts_results
, de the_posts
filtret väntar på att matrisen ska behandlas internt, vilket innebär att matrisen skulle kontrolleras mot opublicerade och klibbiga inlägg. Använd den här om du inte vill ha opublicerade eller inlägg i din array.
VÄLJ
Klausul) för frågan: posts_fields
De VÄLJ
klausul i en SQL-fråga bestämmer vilka databasfält som ska väljas från de resulterande databasraderna, och det här filtret hjälper dig att filtrera det.
BEGRÄNSA
Frågans fråga: post_limits
De BEGRÄNSA
klausul i en SQL-fråga anger begränsningarna till frågan, och det här filtret hjälper dig att filtrera det.
DISTINKT
Frågans fråga: posts_distinct
De DISTINKT
klausul i en SQL-fråga anger att frågan bara ska returnera olika resultat, och det här filtret hjälper dig att filtrera det. Naturligtvis, WP_Query
returnerar inte separata resultat men när du använder det här filtret med en funktion som returnerar "DISTINKT"
, Frågan justeras för att returnera endast olika resultat.
VAR
Frågans fråga: posts_where
De VAR
klausul i en SQL-fråga används för att filtrera MySQLs VÄLJ
, FÖRA IN
, UPPDATERING
eller RADERA
uttalanden, och det här filtret hjälper dig att filtrera filtret. Medan WP_Query
klassen gör allt arbete som behövs för att filtrera resultaten, kan du ta det ett steg längre genom att använda detta filter.
VAR
Klausul för frågan efter att personsökningen har beräknats: posts_where_paged
Detta filter är en iteration till posts_where
filter, som du kan använda med personsökningsfrågor.
VAR
Klausul för en sökfråga: posts_search
En annan iteration till posts_where
filter är det här filtret, som du kan använda för att ändra VAR
klausul för en fråga som används för att få sökresultat i WordPress.
ANSLUTA SIG
Frågans fråga: posts_join
De ANSLUTA SIG
klausul i en SQL-fråga kan du arbeta med ditt SQL-kommando inom flera databastabeller, och det här filtret hjälper dig att filtrera det. Detta är en av de avancerade delarna av MySQL, så jag rekommenderar inte att du använder det här filtret om du inte vet så bra hur MySQL ANSLUTA SIG
s arbete.
ANSLUTA SIG
Klausul för frågan efter att personsökningen har beräknats: posts_join_paged
Precis som posts_where_paged
är en iteration av posts_where
, Detta är en iteration till posts_join
filter som arbetar med sökfrågor.
SORTERA EFTER
Frågans fråga: posts_orderby
De SORTERA EFTER
klausul i en SQL-fråga ordnar beställningen av frågan, och det här filtret hjälper dig att filtrera ordern.
GRUPP AV
Frågans fråga: posts_groupby
De GRUPP AV
klausul i en SQL-fråga gör att sökningen returneras "grupperade" resultat av ett databasfält, och det här filtret hjälper dig att filtrera hur du grupperar resultaten.
posts_clauses
Om du vill hantera alla klausuler samtidigt, finns det ett filter för det också: posts_clauses
. Detta filter täcker VAR
, GRUPP AV
, ANSLUTA SIG
, SORTERA EFTER
, DISTINKT
, VÄLJ
, och GRÄNSER
klausuler.
Nu har vi granskat filtren relaterade till WP_Query
, låt oss gå vidare till andra slags krokar: åtgärder.
pre_get_posts
Innan frågan analyseras kan du interagera med den (t.ex. injicera ytterligare sökvariabler) genom att använda den här åtgärden. Låt oss se ett snabbt exempel från Tom McFarlin för att lära dig att utesluta en kategori från huvudslingan:
set ('category__not_in', $ excluded); * / set_query_var ('category__not_in', $ excluded); add_action ('pre_get_posts', 'tutsplus_exclude_category'); ?>
parse_query
Till skillnad från pre_get_posts
, som ingriper med frågan innan Fråga variablerna är inställda, parse_query
åtgärden hanterar processen efter frågevariablerna är inställda. Således bör du använda den här åtgärden om du vill kontrollera aktuella variabler och vidta åtgärder i enlighet med dem.
stolpen
Termen the_action
är lite förvirrande eftersom det är namnet på en action hook, a WP_Query
-relaterad funktion och även en metod för WP_Query
klass.
Denna åtgärd, som Codex säger, låter oss ändra postobjektet omedelbart efter att ha frågats och ställts in. Med den här åtgärden kan du ändra utmatningen direkt. Låt oss se ett snabbt exempel:
'. __ ('FUNKTION', 'tutsplus'). '
Åtgärder och filter är alltid ett roligt ämne att prata och skriva om. (Jag vet för ett faktum att mina två serier om WordPress-åtgärder och WordPress-filter var roliga att skriva och fick en bra reaktion från vår läsare.) Jag hoppas att du haft den här delen så mycket som jag tyckte om att skriva den.
Vill du lägga till något i artikeln? Skriv en kommentar i kommentarfältet nedan. Och om du gillade artikeln, glöm inte att dela den med dina vänner!
Vi ses i nästa del där vi talar om egenskaperna och metoderna hos WP_Query
klass!