Anonim

Snabb uppdelning

  • query_posts - använd inte utom i sällsynta kantfall
  • pre_get_posts - använd om du vill ändra standardfrågan på en sida
  • ny WP_Query - använd för att få olika resultat från huvudfrågan
  • get_posts - samma som WP_Query, ger bara resultat i matrisformat istället
  • query_posts

    Att använda query_posts rekommenderas inte längre. Det finns bättre sätt att uppnå det du försöker åstadkomma. Försöker du ändra huvudfrågan? Använd åtgärden pre_get_posts för att filtrera resultaten (se nedan). query_posts kastar den ursprungliga huvudfrågan till sidan (efter att den redan har körts) och skapar en ny huvudfråga. Den ersätter alla postrelaterade globala variabler och resulterar i ett helt nytt databassamtal. Det finns helt enkelt ingen anledning till att du inte bara ska ändra den befintliga frågan. Jag är säker på att det finns några kantfall där det ska användas, men jag kan inte tänka mig något utanför mitt huvud. Använd ett av alternativen nedan, eftersom de mer än troligt kommer att passa bättre.

    pre_get_posts

    Detta är ett filter. Detta ändrar huvudfrågan till en sida. Så till exempel vill vi ändra antalet resultat som returneras på hemsidan …

funktion tj_change_home_number ($ fråga) {if (is_home ()) {$ query-> set ('posts_per_page', 2); lämna tillbaka; }} add_action ('pre_get_posts', 'tj_change_home_number');

Detta skulle förändra huvudfrågan för att bara returnera 2 inlägg på hemsidan.

WP_Query

Huvudfrågan på alla mallar som kallas är ett exempel på WP_Query . När du interagerar med de globala inläggsvariablerna i en mall är det resultatet av WP_Query . Användningsfallen för detta är många, men som med get_posts skulle jag förklara en ny WP_Query i syfte att dra relaterade inlägg, något längs dessa linjer. Tänk bara på att om du kör funktionen_post () medan du går igenom en ny WP_Query, kör funktionen wp_reset_postdata () efter att du har gjort looping för att återställa globala postdata till den ursprungliga huvudfrågan.

get_posts

Genom att använda get_posts ringer du i själva verket ett nytt WP_Query och får informationen tillbaka i ett arrayformat. Jag kommer vanligtvis att använda get_posts när jag returnerar inlägg för ett skjutreglage på hemsidan eller ringer upp några relaterade inlägg i en sidofält. WP_Query kan lika enkelt användas, men det är ett bra sätt att få en rad inlägg utan att ändra de globala inläggsvariablerna. Enligt min mening är det det mest förenklade och lättaste att använda. Det krävs inga funktionssamtal efter att dina data har returnerats, bara genom att gå igenom en matris.

Det här kan vara lite förvirrande, så fråga gärna frågor i kommentarerna nedan.

Referens:
WP_Query
pre_get_posts
query_posts
get_posts

Wp_query vs query_posts vs get_posts vs pre_get_posts