Mastering WP_Query Beslektede funksjoner

Hei og velkommen til den andre delen av serien, kalt "Mastering WP_Query". I første del begynte vi med serien ved ganske enkelt å introdusere hva WP_Query klassen er. Og i denne andre delen skal vi lære om funksjonene knyttet til WP_Query.

La oss begynne!

Bruke kraften til WP_Query med funksjoner, handlinger og filtre

Jeg er ikke en ekspert på programmering, men jeg kan se at WP_Query Klassen er et av de beste eksemplene på MVC-mønsteret. Det er ekstremt kraftig, helt utvidbart, og veldig lett å bruke når du blir kjent med det grunnleggende.

I tillegg til sine egenskaper, metoder og parametere (som vi skal gjennomgå i fremtiden), tilbyr WordPress ekstra funksjoner og kroker (som betyr handlinger og filtre) for å jobbe med WP_Query klasse. I denne opplæringen kommer vi til å bli kjent med funksjonene, og i neste del ser vi handlinger og filtre relatert til WP_Query. Hvis du ser at jeg har glemt noe, vær så snill å gi beskjed ved å ta en kommentar.

WP_Query relaterte funksjoner

Det er 13 WordPress-funksjoner som fungerer med WP_Query klasse som kan hjelpe deg å utnytte kraften til WP_Query. De trenger ingen introduksjon, så her går vi:

Å få offentlige variabler: get_query_var ()

Vår første funksjon s navn taler for seg selv, virkelig: Det tar det globale $ wp_query objekt og henter en offentlig spørringsvariabel fra den. Den har to parametere: Den første er variabelen for å returnere verdien, og den andre er en standardverdi som skal returneres hvis variabelen ikke er angitt:

Påvirker hovedløkken: query_posts ()

For å være ærlig, er dette en dårlig funksjon. Du trenger ikke å bruke det i det hele tatt, men for å fortelle "den riktige veien", vi kommer til å gå over det og fortelle deg at det er "feil vei".

query_posts () er en funksjon som endrer hovedspørsmålet ved å sette hovednavnet til side og kjøre en ny spørring - og du må bruke wp_reset_query () å rydde opp etter det.

Denne funksjonen er en av de mest misbrukt Fungerer i kjernen av WordPress. Du bør ikke bruke den til å lage sekundære spørringer - du kan bruke WP_Query klasse eller get_posts () funksjon (som vi snakker om senere i denne opplæringen). Du bør ikke bruke den til å endre hovednavnet heller - du bør bruke pre_get_posts handling (som vi snakker om senere også). Selv Codex fraråder oss fra å bruke det og viser alternativer.

Bunnlinjen: Ikke bruk den.

Få et enkelt innlegg: get_post ()

En annen selvforklarende funksjon er get_post (), som du bruker til å få et enkelt innlegg. Den har tre valgfrie parametere:

  • Den første er post-ID (eller ID for gjeldende innlegg som standard).
  • Den andre er typen av resultatet du får: enten GJENSTAND, ARRAY_A (en assosiativ array) eller ARRAY_N (en numerisk rekkefølge).
  • Den tredje er valget mellom å filtrere resultatet. Standard er 'rå' så det blir ikke filtrert med mindre du setter det til 'redigere', 'vise', 'Egenskap' eller 'Js'.

Lagre spørringer til arrayer: get_posts ()

De get_posts () funksjonen tillater oss å kjøre spørringer og lagre dem som arrays for bruk på forskjellige steder. Det krever de samme argumentene med WP_Query slik at du kan tilpasse spørringen som du vil. (Vi kommer til å se gjennom WP_Queryparametere i fremtiden, så hold deg innstilt!) Det er den beste og mest effektive måten å lage postlister på, men ikke looper.

 'news', 'order' => 'ASC', 'orderby' => 'post_title', 'posts_per_page' => -1); // Returner en rekke av alle innlegg i kategorien "nyheter". $ all_posts_list = get_posts ($ args); ?>

Selv om denne funksjonen kan brukes til å kjøre "sekundære søk" uten problem, anbefaler Codex å bruke WP_Query når du lager flere løkker og bruker get_posts () når du henter en postliste. Peter R. Knight forklarer forskjellen mellom get_posts () og WP_Query Enkelt sagt: Hovedforskjellen er det WP_Query gjør flere databasespørsmål (postdata, metadata, forfatterdata og kommentardata) mens get_posts () gjør bare ett spørsmål (postdata).

Få sider: get_pages ()

Dette merkelig funksjonen har til formål å hente en liste over sider, selv om den har en post_type parameter som også lar deg velge en annen posttype (forutsatt at posttypen er hierarkisk, ellers returnerer den falsk).

 'ASC', 'sort_column' => 'post_title', 'hierarkisk' => 1, 'ekskluder' => ", 'inkluderer' =>", 'meta_key' => ", 'meta_value' =>", "forfattere '=> ",' child_of '=> 0,' foreldre '=> -1,' exclude_tree '=>",' tall '=> ",' offset '=> 0,' post_type '=>' side ' 'post_status' => 'publiser'); $ sider = get_pages ($ args);?>

Den aksepterer argumenter som ligner på WP_Querys argumenter, men de er litt forskjellige:

  • sorteringsrekkefølge: Om du vil sortere sidene i en stigende (ASC) eller synkende (desc) rekkefølge.
  • sort_column: Slik sorterer du sidene. godtar POST_TITLE, menu_order, post dato, post_modified, ID, post_author, og POST_NAME.
  • hierarkisk: Enten å liste sider hierarkisk (1) eller ikke (0).
  • utelukke: En kommaseparert liste eller en rekke side-IDer for å ekskludere fra oppføringen.
  • inkludere: En kommaseparert liste eller en rekke side IDer som skal inkluderes fra oppføringen og ekskludere alt annet.
  • meta_key: Når den brukes sammen med meta_value argument, det inkluderer bare sider som har den definerte metatasten og verdien.
  • meta_value: Når den brukes sammen med meta_key argument, det inkluderer bare sider som har den definerte metatasten og verdien.
  • forfattere: En kommaseparert liste over forfatter-IDer.
  • barn av: En ID for en side for å hente bare sine barn og barnebarn i noteringen.
  • forelder: Oppgi sidene som har den angitte siden ID som foreldre. For at dette argumentet skal fungere, skal hierarkisk argumentet må settes til 0.
  • exclude_tree: En kommaseparert liste eller en rekke side-IDer for å ekskludere med sine barn.
  • Nummer: Antall sider for å hente.
  • offset: Antall sider å hoppe over fra toppen.
  • post_type: Posttype for å spørre. Naturligvis er det som standard side.
  • post_status: En kommaseparert liste over innleggsstatustyper som skal inkluderes.

Kontrollere om spørringen returnerer innlegg: have_posts ()

Uten å akseptere noen parametere, returnerer denne funksjonen bare EKTE hvis spørringen returnerer noen poster og FALSK Hvis ikke.

Arbeide Loop: posten()

Codex sier at det "iterates postindeksen i Loop". Det gjør flere ting:

  1. Den henter neste post fra spørringen.
  2. Det setter opp $ post data.
  3. Det setter i Løkken parameter til EKTE.

Setter opp $ post: setup_postdata ()

Denne funksjonen taler også for seg selv: Den oppretter de globale postdataene. La oss se hva Codex sier om denne:

setup_postdata () fyller de globale variablene $ id, $ authordata, $ dagens dag, $ currentmonth, $ side, $ sider, $ multipage, $ more, $ numpages, som hjelper mange malemerker i den nåværende postkonteksten. Det tilordner ikke det globale $ post variabel, men synes å forvente at dens argument er en referanse til det.

Fjerne gjeldende loop: rewind_posts ()

En annen funksjon som heter dets funksjonalitet: Denne funksjonen "rewinds" Loop slik at du kan kjøre den igjen senere.

Nullstilling $ postwp_reset_postdata ()

Denne funksjonen nullstiller den globale $ post Variabel tilbake til det første innlegget i hovedspørsmålet. Det er bedre å bruke denne etter et sekundært søk.

Tilbakestille spørringen: wp_reset_query ()

Denne skal brukes hvis hovednavnet endres (med query_posts () funksjon eller pre_get_posts handling som vi ser i neste del) slik at hovednavnet kan tilbakestilles.

Kontrollere om nåværende spørring er hovedspørsmålet: is_main_query ()

Denne er et betinget tag som returnerer EKTE hvis den nåværende spørringen er hovedspørsmålet og FALSK hvis det ikke er det. Enkel, rett?

Kontrollere om vi er i løkken: i Løkken()

Et annet betinget tag er i Løkken() som bare returnerer EKTE eller FALSK Hvis koden din kjører inne i Loop eller ikke.

Slutten av del to

Der går du - nå vet du (sannsynligvis) alle funksjonene knyttet til WP_Query! Hold deg oppdatert på neste del der vi skal lære om WP_Query relaterte handlinger og filtre.

Har du kommentarer eller noe å legge til i denne delen? Du er velkommen til å dele dine tanker ved å kommentere nedenfor. Og hvis du likte artikkelen, ikke glem å dele den med vennene dine!