WP_Query vs query_posts vs get_posts vs pre_get_posts

Hurtig opdeling

  • query_posts - brug ikke undtagen i sjældne tilfælde
  • pre_get_posts - brug hvis du vil ændre standard forespørgslen på en side
  • ny WP_Query - brug for at få forskellige resultater fra hovednavnet
  • get_posts - samme som WP_Query, returnerer bare resultater i array format i stedet
  • query_posts

    Brug af query_posts anbefales ikke mere. Der er bedre måder at opnå, hvad du forsøger at opnå. Forsøger du at ændre hovedspørgsmålet? Brug handlingen pre_get_posts til at filtrere resultaterne (se nedenfor). query_posts kaster det oprindelige hovedforespørgsel til siden (efter at det allerede er kørt), og opretter et nyt hovedforespørgsel. Det erstatter alle postrelaterede globale variabler, og resulterer i et helt nyt databaseopkald. Der er simpelthen ingen grund til, at du ikke bare skal ændre den eksisterende forespørgsel. Jeg er sikker på, at der er nogle kantsager, hvor den skal bruges, men jeg kan ikke tænke på nogen fra toppen af ​​mit hoved. Brug en af ​​nedenstående muligheder, da de mere sandsynligt vil være bedre egnet.

    pre_get_posts

    Dette er et filter. Dette ændrer hovedspørgsmålet til en side. Så for eksempel ønsker vi at ændre antallet af resultater, der returneres på hjemmesiden ...

     funktion tj_change_home_number ($ query) {hvis (is_home ()) {$ query-> set ('posts_per_page', 2); Vend tilbage; }} add_action ('pre_get_posts', 'tj_change_home_number'); 

    Dette ville ændre hovedspørgsmålet for kun at returnere 2 indlæg på hjemmesiden.

    WP_Query

    Hovedforespørgslen på en hvilken som helst skabelon, der hedder, er en forekomst af WP_Query . Når du interagerer med de globale postvariabler i en skabelon, er det resultatet af WP_Query . Brugen sager til dette er mange, men som med get_posts, ville jeg erklære en ny WP_Query med det formål at trække relaterede stillinger, noget langs disse linjer. Bare husk på, at hvis du kører funktionen the_post (), mens du løber gennem en ny WP_Query, skal du køre funktionen wp_reset_postdata (), når du er færdig med looping for at nulstille de globale postdata til det oprindelige hovedforespørgsel.

    get_posts

    Ved at bruge get_posts, er du i virkeligheden ved at ringe til en ny WP_Query og få den information returneret i et array format. Jeg bruger typisk get_posts, når jeg vender tilbage til en skyder på hjemmesiden eller ringer nogle relaterede indlæg i et sidebjælke. WP_Query kan lige så nemt bruges, men det er en god måde at modtage en række indlæg uden at ændre de globale postvariabler. Efter min opfattelse er det det mest forenklede og nemmeste at bruge. Der er ingen funktionsopkald, der er nødvendige, efter at dine data er returneret, bare ved at løbe gennem en matrix.

    Dette kan være lidt forvirrende, så vær så velkommen til at stille spørgsmål i kommentarerne nedenfor.

    Reference:
    WP_Query
    pre_get_posts
    query_posts
    get_posts

Se Også