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

Handledning för WordPress-tema för nybörjare – Del 12: Anpassad inläggsfråga

8

I den här sista lektionen lär vi oss hur du skriver din egen fråga med inlägg och går igenom dem utan att avbryta föräldraslingan i mallen. Vi kommer att göra en malldel för enstaka inlägg som visar relaterade inlägg i samma kategori.

Vad vi kommer att göra i den här lektionen är en relaterad inläggsfråga i vår enda inläggsvy, som visar maximalt 3 inlägg, av inläggstyp inlägg, i samma kategori eller kategorier som inlägget vi är på, exkludera själva det aktuella inlägget, och randomisera inläggen som visas. Vi kommer också att undersöka strategier för att inte förstöra den kapslade slingan.

Mall för relaterade inlägg

Låt oss göra de relaterade inläggen till en malldel, som vi lärde oss om i del 10. På så sätt överkomplicerar vi inte single.phpoch gör vår kod mer återanvändbar. Placera begäran om denna nya malldel var du vill. Jag placerar den precis innan jag begär kommentarsmall:

Låt oss nu skapa en ny tom fil i vår temamapp och namnge den related-posts.php. Med den här filen är vi redo att dyka in i att skapa en anpassad inläggsfråga.

Anpassad inläggsfråga

Om du vill göra en anpassad fråga av inlägg har du några alternativ, men jag rekommenderar att du vänjer dig vid klassen WP_Query. Bokmärk den här dokumentationssidan eftersom du kommer att referera till den ofta, eftersom det finns så många alternativ. Jag kommer att visa dig ett praktiskt exempel på hur du ställer in en fråga genom att hänvisa till dokumentationen för varje specifikation vi vill lägga till.

Om du vill lära dig mer om hur man frågar efter inlägg så har jag ett inlägg som går på djupet om just det.

För att göra en anpassad inläggsfråga kommer vi att anropa new WP_Query(), skicka en rad argument till den och lagra resultatet i en variabel. Och då kommer vi att använda exakt samma slinga som vi har använt tidigare i våra mallar (ta en titt på originalslingan här för att jämföra). Men vi måste säga till slingan att gå igenom variabeln, istället för den globala (som är det enda inlägget).

Så här kommer slingan att se ut när du lägger till den i en anpassad fråga:

Som du kan se är slingan exakt densamma, med hjälp av have_postsoch the_post. Skillnaden är att vi kallar dem på $related_postsobjektet. Om vi ​​hoppar över $related_postsdelen antar WordPress automatiskt att det är den globala frågan av inlägg.

Du kanske också märker funktionsanropet wp_reset_postdata()direkt efter loopen. Så här "städar vi efter oss" efter en anpassad fråga med WP_Query. Kom ihåg att det the_post()ställer in det globala postobjektet så att vi kan använda the_title()etc. Och eftersom vi redan är inne i en loop (den i single.php), måste vi se till att vi städar upp och återställer inlägget till det enda inlägget när vi är klara. Om vi ​​inte återställer postdata kommer allt efter detta att hänvisa till det senaste relaterade inlägget vi gick igenom. Detta kan vara ett stort problem! I vårt exempel har vi ha en kommentarsmall som följer detta. Om du utelämnar återställningen kommer kommentarsmallen att visa kommentarer från det senaste relaterade inlägget i slingan. Och inte det enda inlägget vi faktiskt tittar på!

Implementering av vår anpassade loop

Okej, låt oss börja implementera den anpassade slingan i vår related-posts.php. Jag lade till ett omslag och en titel, men som vanligt kan du justera HTML-koden som du vill:

Nu ska vi se kraften med återanvändbarhet i malldelar. Låt oss säga att vi inuti denna anpassade loop vill visa exakt samma innehåll som vi gör i vår content-loop.php, som vi använder i våra arkivmallar. Allt vi behöver göra är att begära den här malldelen i vår anpassade loop, är vi redo att hantera utdata från varje inlägg!

Nu återstår bara att lägga till argumenten till vår inläggsfråga och se till att vi hämtar det vi vill ha. Låt oss gå igenom argumenten en efter en.

Bygga argumenten till vår anpassade inläggsfråga

Vi vill inte hämta fler inlägg än 3. I dokumentationen (avsnittet "Pagination parametrar") är argumentet för detta posts_per_page. Så vi lägger till arrayelementet:

Vi vill se till att WordPress hämtar inlägg, och inte sidor eller något annat. I "Post type parametrar" hittar vi:

Vi vill förhindra att det enda inlägget vi är på, visas i vår relaterade inläggsfråga, för det är ingen mening, eller hur? Dokumentationen talar om för oss i "Inläggs- och sidparametrar" att vi kan lägga till post-ID:t i en array för post__not_in:

Vi vill också randomisera inläggen; eftersom det som standard hämtar de senaste publicerade inläggen och det kan snabbt bli ganska repetitivt när du går igenom inlägg. Som tur är har WordPress en funktion för detta i hur det ordnar inläggen; i "Ordning och ordning efter parametrar" hittar vi:

Slutligen vill vi fråga inlägg som är inom samma kategorier som inlägget vi är på. För att göra detta måste vi först, före frågeargumenten, få kategorierna till det enda inlägget vi befinner oss på. I "Kategoriparametrar" ser vi att vi kan tillhandahålla en rad kategori-ID:n till category__in. Som tur är har WordPress en funktion för att få kategori-ID:n för ett inlägg; wp_get_post_categories()som vi kan använda rakt ut som värde på parametern. Perfekt!

Här är den sista frågan och dess argument:

Uppdatera och du bör se 3 inlägg listade längst ned i enstaka vy. Uppdatera flera gånger för att se att de ändras eftersom vi sa åt WordPress att randomisera dem. Obs: Om du har färre än 3 inlägg i samma kategori får du färre än 3 inlägg.

Det är allt! Nu vet du hur du frågar vilka inlägg du vill. WP_Query -dokumentationssidan är extremt användbar för att justera din fråga, eftersom det verkligen finns obegränsade möjligheter här. Jag uppmuntrar dig att leka med parametrarna, och kanske försöka göra en separat malldel att använda för relaterade inlägg.

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