WP_Query Argumenter Status, Ordre og Paginering

I denne delen av serien om Mastering WP_Query, Du vil lære om noen av argumentene du kan bruke med WP_Query klasse, nemlig de for:

  • status
  • rekkefølge
  • paginering

Du kan bruke disse argumentene til å hente planlagte innlegg fra databasen, for å spørre vedlegg, for å endre måten innleggene blir bestilt på, og hva de er bestilt av, for å angi hvor mange innlegg som vises, og mye mer

Men før du kan gjøre dette, må du forstå hvordan argumenter fungerer WP_Query.

Et sammendrag om hvordan argumenter fungerer i WP_Query

Før vi starter, la oss få en rask omtale på hvordan argumenter fungerer WP_Query. Når du kodes WP_Query i dine temaer eller plugins må du inkludere fire hovedelementer:

  • Argumentene for spørringen, ved hjelp av parametere som vil bli dekket i denne opplæringen
  • selve spørringen
  • løkken
  • Etterbehandling: lukking hvis og mens koder og tilbakestilling av postdata

I praksis vil dette se ut som følgende:

have_posts ()) // Start looping over spørringsresultatene. mens ($ query-> have_posts ()) $ query-> the_post (); // Innholdet i de forespurte postresultatene går her.  // Gjenopprett originale innleggsdata. wp_reset_postdata (); ?>

Argumentene er hva som forteller WordPress hvilke data som skal hentes fra databasen, og det er de som jeg vil dekke her. Så alt vi fokuserer på her er den første delen av koden:

$ args = array (// Argumenter for søket ditt.);

Som du kan se, er argumentene inneholdt i en matrise. Du lærer hvordan du kodes dem mens du arbeider gjennom denne opplæringen.

Koding av dine argumenter

Det er en bestemt måte å kode på argumentene i arrayet, som er som følger:

$ args = array ('parameter1' => 'verdi', 'parameter2' => 'verdi', 'parameter3' => 'verdi');

Du må legge inn parametrene og deres verdier i enkelt anførselstegn, bruk => mellom dem, og skill dem med et komma. Hvis du får feil, kan WordPress ikke legge til alle dine argumenter på spørringen, eller du kan få en hvit skjerm.

Statusparametere

Som du vet om du noen gang har konvertert et innleggs status fra Utkast til Publisert, eller kanskje legger det i søppelet, tilordner WordPress en status til hvert innlegg. Du kan bruke post_status parameter for å søke etter innlegg med en eller flere statuser.

Argumentene er tilgjengelige:

  • publisere: Et publisert innlegg eller en side.
  • i påvente av: Innlegg er ventende vurdering.
  • utkast: Et innlegg i utkaststatus.
  • auto-utkast: Et nyopprettet innlegg uten innhold.
  • framtid: Et innlegg å publisere i fremtiden.
  • privat: Ikke synlig for brukere som ikke er logget inn.
  • arve: En revisjon.
  • søppel: Posten er i søppelbøtte.
  • noen: Henter hvilken status som helst, bortsett fra de fra poststatusene med 'Exclude_from_search' satt til ekte (dvs.. søppel og auto-utkast).

Hvis du ikke angir en status i spørringsargumenter, vil WordPress standard til publisere; Hvis den nåværende brukeren er logget inn, vil den også inneholde innlegg med statusen til privat. Hvis du kjører et spørsmål på administrasjonssidene, vil WordPress også inneholde de beskyttede statusene, som er framtidutkast og i påvente av som standard.

Så la oss si at du kjører et hendelsesnettsted, og du bruker en tilpasset posttype event, ved bruk av publiseringsdatoen som datoen som hendelsen skjer. Som standard vil WordPress ikke vise noen hendelser som ikke har skjedd ennå: selv om du har planlagt dem, er deres planlagte dato i fremtiden, så deres innleggsstatus er fremtiden.

For å komme seg rundt dette bruker du bare disse argumentene:

$ args = array ('post_type' => 'event', 'post_status' => 'fremtid');

Dette vil bare vise de hendelsene som ikke har skjedd ennå, som de vil ha publisere status. Men hvis du også vil vise hendelser som har skjedd, kan du bruke en rekke innleggsstatuser for å inkludere mer enn én:

$ args = array ('post_type' => 'event', 'post_status' => array ('fremtid', 'publiser'));

De post_status parameter er viktig når du spør etter vedlegg. Dette skyldes at de har status av arve, ikke publisere. Så for å søke etter alle vedlegg, vil du bruke dette:

$ args = array ('post_type' => 'vedlegg', 'post_status' => 'arve');

Alternativt kan du erstatte arve med noen som ville ha samme effekt.

Bestillingsparametere

Det er to parametre du bruker til å bestille innlegg hentet av WP_Query: rekkefølge og rekkefølge etter. Som du forventer, rekkefølge definerer rekkefølgen som innlegg vil bli sendt ut i loop, og rekkefølge etter definerer hvilket felt i databasen de skal sorteres etter.

La oss begynne med å se på argumenter for rekkefølge.

Ordren Parameter

Det er bare to argumenter du kan bruke for dette:

  • ASC: stigende rekkefølge fra laveste til høyeste verdier (1, 2, 3; a, b, c).
  • DESC: synkende rekkefølge fra høyeste til laveste verdi (3, 2, 1, c, b, a).

Disse er ganske selvforklarende. Hvis du ikke inkluderer et argument for rekkefølge, WordPress vil standard til DESC.

Orderby Parameter

Du kan sortere innleggene dine med en rekke felt:

  • ingen: Ingen ordre (tilgjengelig med versjon 2.8).
  • ID: Bestill etter post id. Merk kapitaliseringen.
  • forfatter: Bestilling av forfatter.
  • tittel: Sorter etter tittel.
  • Navn: Bestill etter innleggssnøkkel.
  • type: Bestill etter posttype.
  • Dato: Bestill etter dato.
  • modifisert: Bestill etter siste endrede dato.
  • forelder: Bestill etter post / side foreldre id.
  • rand: Tilfeldig rekkefølge.
  • COMMENT_COUNT: Bestill etter antall kommentarer.
  • menu_order: Ordre etter sideordre. Brukes oftest for Pages (bruker verdien du legger til i metaboxet på Rediger sideskjerm) og vedlegg (ved hjelp av heltallfeltene i dialogboksen Sett inn / last opp mediegalleri), men kan brukes til alle posttyper med menu_order aktivert.
  • meta_value: Sorter etter verdien for en meta-nøkkel (eller egendefinert felt). Dette fungerer bare hvis du også inkluderer en meta_key parameter i dine argumenter. Meta verdier er sortert alfabetisk og ikke numerisk (så 34 vil komme før 4, for eksempel). 
  • meta_value_num: Ordre etter numerisk metaværdi. Som med meta_value, du må også inkludere a meta_key argument i søket ditt.
  • post__in: Bevar post ID-ordre gitt i post__in matrise.

Standard er Dato, dvs. datoen et innlegg ble publisert.

Så for eksempel hvis du vil sortere innleggene dine etter tittel i stigende rekkefølge, vil du bruke disse argumentene:

$ args = array ('orderby' => 'title', 'order' => 'ASC');

Bestilling av flere felt

Du trenger ikke å holde fast i bare ett felt for å sortere innleggene dine av. For å sortere etter flere felt, bruker du en matrise med rekkefølge etter parameter og (valgfritt) med rekkefølge parameter hvis du vil sortere hvert felt i en annen rekkefølge.

Så la oss si at du har et tilpasset tilpasset felt som du vil bruke til sortering på et e-handelsnettsted. Du kan sortere etter vurdering og deretter tittel, både i stigende rekkefølge, på denne måten:

$ args = array ('orderby' => array ('meta_value_num', 'title'), 'rekkefølge' => 'ASC', 'meta_key' => 'rating');

Legg merke til at jeg har tatt med meta_key argument for å la WordPress vite hvilket tilpasset felt jeg bruker. Du gjør dette på grunn av måten WordPress lagrer etter metadata: ikke i wp_posts bord, men i wp_postmeta bord.

Men hva om du ønsket å bestille ved vurdering i synkende rekkefølge og deretter tittelen i stigende rekkefølge? Du bruker bare en annen matrise:

$ args = array ('orderby' => array ('meta_value_num', 'title'), 'order' => array ('DESC', 'ASC'), 'meta_key' => 'rating');

Du kan også sortere etter flere felt når du ikke bruker post-metadata, for eksempel å sortere etter posttype og deretter dato:

$ args = array ('orderby' => array ('type', 'date'), 'order' => array ('ASC', 'DESC'));

Dette vil sortere etter posttype i stigende rekkefølge og deretter innen hver posttype, etter dato i synkende rekkefølge.

Paginering Parametre

Det neste settet av parametere vi kommer til, er for paginering. Disse hjelper deg med å definere hvor mange innlegg vil bli forespurt og hvordan paginering vil fungere når de blir utdata.

De tilgjengelige parametrene er:

  • nopaging (boolean): Vis alle innlegg eller bruk paginering. Standard er 'falsk', dvs. bruk paginering.
  • posts_per_page (int): Antall innlegg som skal vises per side.
  • posts_per_archive_page (int): Antall innlegg som kun skal vises per side på arkivsidene.
  • offset (int): Antall innlegg til forflytte eller passere.
  • paged (int): Siden i arkivet hvilke innlegg vises fra.
  • side (int): Antall sider for en statisk forside. Vis innleggene som normalt ville dukke opp bare på side X på en statisk forsiden.
  • ignore_sticky_posts (boolean): Ignorer postklassifisering-standardene til falsk.

La oss ta en titt på noen eksempler. 

Antall innlegg og offset innlegg

For eksempel, for å vise de fem siste innleggene:

$ args = array ('posts_per_page' => '5');

Eller for å vise fem siste innlegg, unntatt den nyeste:

$ args = array ('posts_per_page' => '5', 'offset' => '1');

Vær oppmerksom på at selv om du henter innlegg fra de siste seks innleggene i databasen, bruker du fortsatt 'posts_per_page' => '5' som det er antall innlegg som vil bli sendt ut.

Hvis du tar dette litt lenger, kan du skrive to spørringer: en for å vise det siste innlegget og et sekund for å vise ti flere innlegg, unntatt det innlegget:

$ args = array ('posts_per_page' => '1'); // Spørring og sløyfe gå her, samt tilbakestille innlegg. $ args = array ('posts_per_page' => '10', 'offset' => '1'); // Second query, loop og resetting gå her.

Du kan også bruke posts_per_page å vise alle innlegg:

$ args = array ('posts_per_page' => '-1');

Sticky innlegg

Normalt vil de klissete innleggene dukke opp først i et hvilket som helst spørsmål: Hvis du vil overstyre dette, bruk ignore_sticky_posts:

$ args = array ('posts_per_page' => '5', 'ignore_sticky_posts' => true);

Ovennevnte argumenter returnerer de siste fem innleggene, uansett om de er klissete eller ikke.

Merk at hvis du vil vise bare klissete innlegg, må du bruke get_option () funksjon og post__in argument som følger:

$ klebrig = get_option ('sticky_posts'); $ args = array ('posts_per_page' => '5', 'post__in' => $ klebrig);

Ovennevnte ville vise de siste fem klissete innleggene: hvis det er mindre enn fem (for eksempel tre) klissete innlegg, vil det ikke vise ikke klistrende innlegg, men bare de siste tre klissete innleggene.

Paginering i arkiver

I tillegg til å definere hvor mange innlegg som hentes fra databasen, kan du også bruke paginasjonsparametere til å definere hvordan de resulterende innleggene blir paginert på arkiv- og søkesider.

Så for eksempel på en arkivside kan du bruke denne koden til å vise 20 innlegg per side i arkivet:

$ args = array ('posts_per_archive_page' => '20');

Merk: posts_per_archive_page argumentet vil overstyre posts_per_page.

Du kan også velge å skrive ut bare sidene som vil vises på en gitt side i paginerte sider. Så hvis du for eksempel vil vise de 20 innleggene som vil vises på den tredje siden i eksemplet ovenfor, kan du bruke dette:

$ args = array ('posts_per_archive_page' => '20', 'paged' => '3');

En alternativ måte å søke på de samme innleggene er å bruke offset argument:

$ args = array ('posts_per_page' => '20', 'offset' => '40');

Dette hopper over de første 40 innleggene (som vil være på de to første arkivsidene) og henter de neste 20 innleggene (som ville være på den tredje arkivsiden. En av tingene jeg elsker om WordPress er hvordan det så ofte gir deg mer enn en måte å oppnå noe på!

Du kan også slå paginering helt av, for å sikre at alle innlegg vises på samme side:

$ args = array ('nopaging' => true);

Sammendrag

De WP_Query klassen gir deg god fleksibilitet når det gjelder å bestemme hvor mange innlegg du vil spørre, hvilken rekkefølge du vil vise dem i, og hvilken status post du vil vise.

Noen av disse argumentene er avgjørende for å spørre bestemte typer innlegg (for eksempel 'post_status' => 'arvet' for vedlegg), mens andre bare gir deg mer kontroll over måten dine spørsmål kjører.

Ved å bruke disse parameterne kan du opprette egendefinerte spørringer som gjør mye mer enn bare å legge ut de nyeste publiserte innleggene.