WP_Query vs query_posts vs get_posts vs pre_get_posts

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, returnerar bara resultat i arrayformat istället
  • query_posts

    Användning av query_posts rekommenderas inte längre. Det finns bättre sätt att uppnå vad du försöker åstadkomma. Försöker du ändra huvudfrågan? Använd åtgärdens pre_get_posts för att filtrera resultaten (se nedan). query_posts kastar den ursprungliga huvudfrågan till sidan (efter det 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 att du inte bara ska ändra den befintliga frågan. Jag är säker på att det finns några kantfall där den ska användas, men jag kan inte tänka på någon från toppen av mitt huvud. Använd ett av alternativen nedan, eftersom de kommer mer än troligt att passa bättre.

    pre_get_posts

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

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

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

    WP_Query

    Huvudfrågan på någon mall som heter är en förekomst av WP_Query . När du interagerar med de globala postvariablerna i en mall, är det resultatet av WP_Query . Användningsärenden för detta är många, men som med get_posts, skulle jag förklara en ny WP_Query för att dra relaterade inlägg, något längs dessa linjer. Tänk bara på att om du kör funktionen the_post () medan du går igenom en ny WP_Query, kör funktionen wp_reset_postdata () när du har gjort looping för att återställa den globala postdata till den ursprungliga huvudfrågan.

    get_posts

    Genom att använda get_posts, ringer du faktiskt en ny WP_Query och får den informationen tillbaka i ett arrayformat. Jag brukar använda get_posts när jag återkommer inlägg för en reglage på hemsidan eller ringa några relaterade inlägg i ett sidofält. WP_Query kan lika enkelt användas, men det är ett bra sätt att ta emot en rad inlägg utan att ändra de globala inläggsvariablerna. Enligt min åsikt är det den mest enkla och enklaste att använda. Det finns inga funktionsanrop som behövs efter att dina data har returnerats, bara genom att gå igenom en array.

    Det här kan vara lite förvirrande, så tveka inte att ställa frågor i kommentarerna nedan.

    Referens:
    WP_Query
    pre_get_posts
    query_posts
    get_posts

Se Även