Som standard oppretter WordPress arkiver som viser alle innleggene dine i omvendt rekkefølge. Hvis brukere ser etter innlegg i en bestemt kategori eller med en gitt taksonomi, må de besøke arkivsiden for den kategorien eller sikt.
Men hva om du vil gjøre ditt hovedarkiv for en posttype mer brukervennlig? I denne veiledningen vil jeg vise deg hvordan du lager en arkivside for en egendefinert innleggstype som viser innlegg av den posttypen kategorisert i henhold til en taksonomi, slik at i stedet for en lang liste besøkende vil se en liste for hver taksonomi.
For å følge denne opplæringen trenger du en utviklingsinstallasjon av WordPress og en kodeditor. Du skal opprette et tema som er et barntema på tjuefemteen, så du trenger det som er installert (som det skal være som standard).
Jeg skal ikke vise deg hvordan du lager et barnemne, men hvis du sitter fast, ta en titt på stilarket i kodebunten for denne opplæringen.
Etter min erfaring er denne teknikken mest nødvendig for tilpassede posttyper og taksonomier i stedet for for vanlige innlegg og kategorier eller koder, så jeg begynner med å registrere en posttype og taksonomi.
Merk: Jeg bruker samme "dyr" posttype som jeg registrerte i en tidligere opplæring om å lage et bildebasert arkiv. Hvis du vil skyve ting litt lenger, kan du kombinere teknikken i den opplæringen med den jeg viser deg her, og vise taksonomilogglister med utvalgte bilder.
I temaets funksjonsfil legger du til følgende kode for å registrere posttypen:
// registrer en egendefinert posttype som kalles «dyr» -funksjon wptp_create_post_type () $ labels = array ('name' => __ ('Dyr'), 'singular_name' => __ ('animal'), 'add_new' => __ ('Nytt dyr'), 'add_new_item' => __ ('Legg til nytt dyr'), 'edit_item' => __ ('Rediger dyr'), 'new_item' => __ ('Nytt dyr'), 'view_item '=> __ (' Se dyr '),' search_items '=> __ (' Søk dyr '),' not_found '=> __ (' Ingen dyr funnet '),' not_found_in_trash '=> __ Søppel '),); $ args = array ('labels' => $ etiketter, 'has_archive' => true, 'public' => true, 'hierarchical' => false, 'supports' => utdrag ',' egendefinerte felt ',' miniatyrbilde ',' sideattributter '),' taxonomies '=> array (' post_tag ',' kategori ');); register_post_type ('animal', $ args); add_action ('init', 'wptp_create_post_type');
Deretter legger du til koden for å registrere taksonomien:
// register en taksonomi kalt 'Animal Family' -funksjon wptp_register_taxonomy () register_taxonomy ('animal_cat', 'animal', array ('etiketter' => array ('name' => 'Animal Families', 'singular_name' => ' Animal Family ',' search_items '=>' Søk animalfamilier ',' all_items '=>' Alle animalfamilier ',' edit_item '=>' Rediger dyrefamilier ',' update_item '=>' Oppdater dyrehamilie ',' add_new_item '=>' Legg til ny dyrfamilie ',' new_item_name '=>' Nytt dyrfamilienavn ',' menu_name '=>' Animalfamilie '),' hierarkisk '=> sant,' sort '=> sant' '=> array (' orderby '=>' term_order '),' rewrite '=> array (' slug '=>' animalfamilie '),' show_admin_column '=> true)); add_action ('init', 'wptp_register_taxonomy');
Når du har gjort dette, legg til noen data. Nedenfor kan du se dataene jeg har lagt til med noen taksonomi vilkår brukt. Jeg gjør ingen påstand om nøyaktigheten av min terminologi med hensyn til dyrefamilier, så vær så snill å ikke kommentere om jeg har det galt!
Det neste trinnet er å lage en arkivmal for den nye innleggstypen. I ditt tema, opprett en ny fil som heter arkiv-animal.php
.
Siden dette temaet er et tema for barn på tjuende femten, vil arkivmalen trenge kode kopiert fra det aktuelle temaet som en wrapper for den tilpassede sløyfen du skal lage. Så legg til følgende i arkivmalen din:
Merk: Hvis du jobber med ditt eget tema, kopier innpakningskoden fra ditt eget temas indeks eller arkivfil.
3. Populere arkivmalen: Hente Taxonomy-vilkår
Slik at arkivet ditt kan vise dyr etter taksonomi, er det neste trinnet å hente disse betingelsene.
I den nye malfilen din, under avslutningen
tag (eller under åpningsdelen av innpakningskoden din hvis du bruker ditt eget tema), hent vilkårene ved å bruke
get_terms ()
:'count', 'hide_empty' => 0)); ?>Merk at jeg har brukt to parametre her:
rekkefølge etter
- Dette gjør at du kan spesifisere rekkefølgen på betingelsene som vises. Jeg har brukt telle
som verdien slik at begrepet med de fleste innleggene som er tildelt det, vil bli vist først, men du kan bestille etter navn eller ID - hvis du lar dette stå tomt, vil WordPress bestille etter navn. Se Codex-siden på get_terms ()
for flere detaljer.hide_empty
- Dette forteller at WordPress ikke henter noen vilkår uten innlegg som er tildelt dem. Det sparer deg for å sjekke om søket ditt har noen innlegg senere.Etter å ha gjort dette, bruker du for hver()
å fortelle WordPress å passere gjennom hvert av disse vilkårene og kjøre en spørring som du må definere. Under koden du nettopp har lagt til, legg inn følgende:
'dyr', 'animal_cat' => $ term-> slug); $ query = nytt WP_Query ($ args);
Dette forteller WordPress å løpe gjennom hvert begrep, og definerer deretter spørringen som det må kjøre hver gang. Argumentene for spørringen inkluderer posttypen og begrepet i 'Animal_cat'
taksonomi, som er verdien av $ sikt
variabel.
Etter å ha definert søket ditt, må du legge til en sløyfe. Først skriver du ut navnet på termen som blir forespurt som en overskrift. Under linjen begynner $ query
men inne i armene på for hver
setning, legg til denne linjen:
ekko''. $ term-> navn. '
';
Deretter legger du til koden for å inneholde innleggene dine i en liste:
// utgav posttitlene i en liste ekko '
På innsiden av listen legger du nå sløyfen din:
// Start Loop mens ($ query-> have_posts ()): $ query-> the_post (); ?>
Som du kan se, er dette en enkel sløyfe som gir tittelen på hvert innlegg inni en kobling til innlegget, og utsender ikke noe innhold. Hvis du ville at du kunne legge til et utdrag eller et kjennetegnet bilde her.
Endelig tilbakestill spørringen med wp_reset_postdata ()
under linjebestemmelsen ekko '';
Dette er hva søket ditt og sløyfen vil se ut som:
'dyr', 'animal_cat' => $ term-> slug); $ query = nytt WP_Query ($ args); // utdata termen navn i et overskrift tag ekko ''. $ term-> navn. '
'; // utgav posttitlene i en liste ekko '
Endelig lagre malfilen din og se arkivet for innleggstype. Du ser at den lister opp innleggene dine etter taksonomi, ikke i en lang liste.
Denne teknikken er nyttig når du vil at besøkende skal kunne se kategorisert data raskt uten å måtte se på en rekke arkivsidene - det bringer alt sammen på ett sted, men sortert for enkelhets skyld. Her er noen ideer for hvordan du kan tilpasse teknikken og ta det videre:
get_categories ()
eller get_tags ()
.index.php
fil for å vise innlegg etter kategori, tag eller taksonomi.posts_per_page
og offset
i dine argumenter for å gjøre dette - se detaljer om hvordan dette fungerer på WP_Query Codex-siden.posts_per_page
for å begrense antall innlegg som vises slik at hver liste har samme lengde. Du kan kombinere dette med styling for å vise lister side ved side.get_term_link ()
å gjøre dette.