WP_Query vs query_posts vs get_posts vs pre_get_posts

Hurtig sammenbrudd

  • query_posts - ikke bruk unntatt i sjeldne kanten tilfeller
  • pre_get_posts - bruk hvis du vil endre standard spørringen på en side
  • ny WP_Query - bruk for å få forskjellige resultater fra hovednavnet
  • get_posts - samme som WP_Query, returnerer bare resultater i arrayformat i stedet
  • query_posts

    Bruk av query_posts anbefales ikke lenger. Det er bedre måter å oppnå det du prøver å oppnå. Prøver du å endre hovedspørsmålet? Bruk handlingen pre_get_posts for å filtrere resultatene (se nedenfor). query_posts kaster det opprinnelige hovednavnet til siden (etter at det allerede har blitt kjørt), og oppretter et nytt hovedspørsmål. Den erstatter alle relaterte globale variabler, og resulterer i en helt ny databaseanrop. Det er rett og slett ingen grunn til at du ikke bare skal endre det eksisterende spørsmålet. Jeg er sikker på at det er noen kantsaker der den skal brukes, men jeg kan ikke tenke på noen fra toppen av hodet mitt. Bruk ett av alternativene nedenfor, da de sannsynligvis vil være bedre egnet.

    pre_get_posts

    Dette er et filter. Dette endrer hovedspørsmålet til en side. Så, for eksempel, ønsker vi å endre antall resultater som returneres på hjemmesiden ...

     funksjon tj_change_home_number ($ query) {if (is_home ()) {$ query-> sett ('posts_per_page', 2); komme tilbake; }} add_action ('pre_get_posts', 'tj_change_home_number'); 

    Dette vil endre hovedspørsmålet for å bare returnere 2 innlegg på hjemmesiden.

    WP_Query

    Hovednavnet på en hvilken som helst mal som heter, er en forekomst av WP_Query . Når du samhandler med de globale postvariablene i en mal, er dette resultatet av WP_Query . Brukssaken til dette er mange, men som med fåposter, vil jeg erklære en ny WP_Query med det formål å trekke relaterte innlegg, noe i henhold til disse linjene. Bare husk at hvis du kjører funksjonen the_post () mens du går gjennom en ny WP_Query, kjør funksjonen wp_reset_postdata () etter at du har gjort looping for å tilbakestille globale postdata til det opprinnelige hovednavnet.

    get_posts

    Ved å bruke get_posts, er du faktisk i gang med å ringe en ny WP_Query, og få den informasjonen returnert i et arrayformat . Jeg vil vanligvis bruke get_posts når jeg returnerer innlegg til en skyveknapp på hjemmesiden, eller ringe noen relaterte innlegg i et sidebjelke. WP_Query kan like enkelt brukes, men det er en god måte å motta en rekke innlegg uten å endre de globale postvariablene. Etter min mening er det den mest enkle og enkleste å bruke. Det er ingen funksjonssamtaler nødvendig etter at dataene dine er returnert, bare looping gjennom en matrise.

    Dette kan være litt forvirrende, så vær så snill å stille spørsmål i kommentarene nedenfor.

    Henvisning:
    WP_Query
    pre_get_posts
    query_posts
    get_posts

Se Også