Mastering WP_Query Åtgärder och filter

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!

WP_Query-relaterade filter

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.

Filtrering av antalet funna inlägg för frågan: 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.

Filtrering av frågan för att köra för att hämta de inlägg som hittades: 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.

Filtrering av hela SQL-frågan: 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.

Filtrering av arrayen returnerar frågan: 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 array som genereras från SQL-frågan.)

Filtrera fältet med hämtade inlägg: 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.

Filtrering av fältlistan (och 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.

Filtrera 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.

Filtrera 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.

Filtrera 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.

Filtrera 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.

Filtrera 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.

Filtrera 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 SIGs arbete.

Filtrera 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.

Filtrera 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.

Filtrera 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.

Filtrering av alla klausuler i frågan: 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.

WP_Query-relaterade åtgärder

Nu har vi granskat filtren relaterade till WP_Query, låt oss gå vidare till andra slags krokar: åtgärder.

Stör i frågan innan den körs: 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'); ?>

Hantera analysen av frågan: 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.

Ändra postobjektet: 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'). '
'; add_action ('the_post', 'tutsplus_featured_badge'); ?>

Slut på del tre

Å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!