✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

Guide: Ändra WordPress globala fråga

4

I vissa fall kan du behöva ändra den globala inläggsfrågan WordPress utför på alla sidor du besöker – både admin och frontend. I den här guiden kommer vi att titta på vilken krok som ska användas och hur man ändrar frågeargumenten efter eget tycke.

Vilken krok man ska använda

Först måste du veta vilken krok du ska lägga till din kod till. Vi behöver en hook som sker direkt efter att WordPress har ställt in alla argument, men innan själva frågan körs. För detta använder vi handlingen pre_get_posts.

I denna krok får du en parameter; vilket är ett WP_Queryobjekt som WordPress senare kommer att köra frågan med. Du gör ändringar i objektet – men du behöver inte returnera det eftersom WordPress kör frågan med det modifierade objektet.

add_action('pre_get_posts', function($query) { // Add your code here });

För att ändra frågan kräver troligen att du använder några villkorliga taggar för att ange de fall du vill ändra den. Du kanske till exempel vill rikta in frågan endast i sökresultat eller kategorivyer.

Villkorliga taggar

WordPress har ett gäng villkorliga taggar som du kan använda för att specificera vilka fall du vill lägga till din kod. En villkorlig tagg är helt enkelt en funktion som returnerar true eller false beroende på vilket tillstånd WordPress är i. Exempel på vanliga villkorliga taggar är is_admin()för att kontrollera om vi för närvarande är i admin eller frontend, is_singular()om vi är på ett enda inlägg eller sida i frontend, och is_search()om vi är på sökresultatsidan.

Tänk på att kroken pre_get_postskörs både för admin och frontend. Om du bara vill påverka den globala frågan i frontend, måste du linda in din kod i en if-check på den villkorliga taggen is_admin().

Anmärkning om villkorliga taggar ipre_get_posts

Villkorliga taggar är bra och allt, men det finns några saker att tänka på när du använder dessa inuti pre_get_posts.

Först måste du bekanta dig med taggen is_main_query(). Åtgärden pre_get_postskörs faktiskt flera gånger för varje sidladdning. Till exempel pre_get_postskörs när varje meny genereras (inklusive de i widgets). För att ändra den faktiska globala frågan, t.ex. inlägg för ett kategoriarkiv eller sökresultat, måste du rikta in dig på "huvudfrågan" med is_main_query().

För det andra måste du vara medveten om fall där du behöver kontrollera de villkorliga taggarna på det angivna objektet istället för att anropa funktionen "oberoende". Vanligtvis när du använder villkorliga taggar, skulle du skriva det så här:

if (is_main_query()) { // Do stuff }

Men när du använder pre_get_posts, finns det några villkorliga taggar som du måste applicera på objektet. Till exempel:

Du bör alltid kontrollera is_main_query()objektet som tillhandahålls i pre_get_posts. Läs dokumentationen för pre_get_posts för mer information.

Det här är ett exempel på att kontrollera om vi inte är i admin, och om vi är vid huvudinläggsfrågan:

Ändra eller lägga till argument

Eftersom vi arbetar med ett WP_Queryobjekt kan du hänvisa till WP_Querys dokumentation för hur du bygger dina argument för att anpassa inläggsfrågan. Tänk på att argumenten redan är ifyllda. I så fall måste du lägga till eller ändra befintliga värden. Eller ta bort de du vill ta bort.

Du använder set()funktionen på WP_Queryobjektet för att sätta argument. Metoden accepterar två argument, argumentnyckeln och för det andra värdet. Till exempel, inställning av posts_per_pageargumentet skulle göras så här:

I de fall du vill lägga till eller ändra ett redan existerande argument, skulle du vanligtvis göra detta genom att först spara det befintliga argumentet i en variabel. Du kan använda metoden get()för detta. Sedan modifierar du variabeln, genom att lägga till eller slå samman arrayer eller vad inte. Och slutligen använder du set()för att ersätta den modifierade variabeln tillbaka till frågeobjektet. Jag rekommenderar att du använder var_dump()på objektet för att se vad det innehåller, och det här är också ett bra sätt att kontrollera om dina villkorliga taggar är korrekta.

Här är ett snabbt exempel på hur du använder get()(kolla helt enkelt om det är tomt), och i så fall lägg till dina egna argument med set().

Anmärkning om tax_query

WordPress har separata underklasser för hantering av taxonomidelen (WP_Tax_Query) inom WP_Query. Om du behöver göra mer komplexa modifieringar av taxonomifrågor kan pre_get_postsåtgärden vara för tidig. Vissa värden kan vara tomma eftersom de fylls i senare. I det här fallet kan det vara bättre att använda åtgärden parse_tax_queryistället för pre_get_posts. Läs dokumentationen för denna krok för att se om detta är något för dig.

Slutsats

Argumenten du lägger till eller ändrar beror helt på vad du vill göra, men du bör nu ha lite insikt i strategier för att få tag i den globala frågan. Om du behöver få lite insikt i WP_Queryobjektet och hur man använder dess argument kan mitt inlägg om hur man frågar efter inlägg vara av intresse.

Inspelningskälla: awhitepixel.com

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer