Taksonomiarkiv Liste Innlegg av andre Taksonomiets Vilkår

Hva du skal skape

Hvis nettstedet ditt bruker flere taksonomier til å kategorisere informasjon, kan det være nyttig å dele opp innlegg i et taksonomiarkiv etter betingelsene i en andre taksonomi. 

I denne veiledningen vil jeg vise deg hvordan du lager et taksonomiarkiv for å gjøre nettopp det.

Hvis du noen gang har jobbet med multi-relationsdatabaser, vil du vite at en av deres flotte funksjoner er måten du kan se data på i henhold til flere taksonomier. Hvis du for eksempel har en database med klienter, kan du enkelt se hvilke klienter som har ansatt deg for ulike kategorier av prosjekter, og deretter sortere det videre ved å se hvilke webdesignklienter som er sagt på et bestemt sted.

Da jeg først begynte å jobbe med WordPress, fant jeg det frustrerende at du ikke lett kunne gjøre dette - i det minste kan du ikke gjøre det med et ut-fra-boks-WordPress-installasjon som kjører standardtemaet.

Det er imidlertid mulig å klassifisere dataene dine med mer enn én taksonomi. I denne opplæringen. Jeg vil vise deg hvordan du oppretter en taksonomi-side for å liste innlegg i den taksonomien, bestilt av vilkårene i en annen taksonomi som også gjelder dem. 

Jeg lager da et andre taksonomiarkiv for den andre taksonomien, som viser innleggene i rekkefølge av de første taksonomiens vilkår (tro på meg - det vil gi mer mening når du ser det skje!)

Hva du trenger

For å fullføre denne opplæringen må du:

  • en utviklingsinstallasjon av WordPress
  • en kodeditor

1. Opprette temaet

For denne opplæringen skal jeg opprette et barntema på tjuefemteen med to nye malfiler, et stilark og en funksjonsfil. Hvis du jobber med ditt eget tema, kopier du bare koden fra min funksjonsfil til temaets funksjonsfil, og legg til malfiler med tweaks for å gjenspeile temaets oppslag.

For å lage mitt tema lager jeg en fil som heter style.css i min tomme temamappe og fyll den med følgende:

/ * Tema navn: WPTutsPlus Opprett et taksonomiarkiv til listen Innlegg av en annen taksonomiets vilkår Tema URI: http://rachelmccollin.co.uk/wptutsplus-taxonomy-archive-list-by-second-taxonomy/ Beskrivelse: Tema for å støtte WPTutsPlus opplæring om å lage et egendefinert taksonomiarkiv. Barn tema for Twenty Fourteen tema. Forfatter: Rachel McCollin Forfatter URI: http://rachelmccollin.co.uk/ Mal: ​​twentyfourteen Versjon: 1.0 * / @import url ("... /twentyfourteen/style.css");

Dette skaper barnetemaet mitt.

2. Registrere posttypen og taxonomiene

For denne opplæringen skal jeg bruke det samme 'dyr' posttype og 'Animal_cat' taksonomi som jeg brukte i min veiledning om å lage en egendefinert posttype mal. Jeg vil også legge til en andre taksonomi kalt 'Habitat'.

For å gjøre dette, lager jeg en ny fil som heter functions.php. Først legger jeg til funksjonen for å registrere posttypen min:

 __ ('Dyr'), 'singular_name' => __ ('dyr'), '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'), 'ikke funnet '=> __ (' Ingen dyr funnet '),' not_found_in_trash '=> __ (' Ingen dyr funnet i 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'); ?>

Og så registrerer jeg mine to taksonomier innen en funksjon:

 array = '' Animal Families ',' singular_name '=>' Animal Family ',' search_items '=>' Søkefamilier ',' all_items '=>' Alle dyrefamilier ',' edit_item '=>' Rediger Dyrfamilier ',' update_item '=>' Oppdater Dyrfamilie ',' add_new_item '=>' Legg til nytt dyrfamilie ',' new_item_name '=>' Nytt dyrfamilienavn ',' menu_navn '=>' Dyrfamilie ' ), 'hierarchical' => sant, 'sorter' => sant, 'args' => array ('orderby' => 'term_order'), 'rewrite' => array ), 'show_admin_column' => true)); // register en taksonomi kalt 'Habitat' register_taxonomy ('habitat', 'animal', array ('etiketter' => array ('name' => 'Habitats', 'singular_name' => 'Habitat', 'search_items' = > 'Legg til ny habitat', 'new_item_name', 'update_item' => 'Oppdater habitat', 'add_new_item' => 'Legg til ny habitat', 'new_item_name' => Sant, 'sorter' => sant, 'args' => array ('orderby' => 'term_order'), 'show_admin_column' => true));  add_action ('init', 'wptp_register_taxonomies'); ?>

Dette skaper 'dyr' posttype og de to taksonomiene som gjelder for den. Legg merke til at jeg har brukt 'Show_admin_column' å gjøre livet litt lettere når jeg administrerer innleggene mine.

Etter å ha lagt til noen data og klassifisert dyrene i henhold til mine taksonomier, kan jeg nå se dataene mine i WordPress dashbordet, som vist nedenfor.

Merk: Min klassifisering av dyrene jeg har brukt er ikke veldig vitenskapelig - vennligst ikke kommentere min forståelse av habitater eller familier!

3. Opprette First Taxonomy Template File

Det neste trinnet er å opprette en malfil for 'Animal_cat' taksonomiarkiv. Opprett en fil i temamappen din og ring den taksonomi-animal_cat.php. Legg nå pakkekoden til den fra temaet ditt (jeg har kopiert dette fra foreldre-temaet ditt, det vil være annerledes hvis du bruker ditt eget tema):

  

Denne malfilen må nå ha noen data lagt til den.

Identifisering av den gjeldende kalenderen

Arkivmalen vil bruke WP_Query å opprette en egendefinert spørring for hvert begrep. En av de forespurte objekterne vil være det nåværende taksonomietermet som vises, så du må identifisere det og lagre det som en variabel.

Under get_header () linje, legg til:

Du kan da bruke det $ animalcat variabel senere.

Skrive ut en sideoverskrift

Arkivet har for øyeblikket ikke en hovedoverskrift, så du må legge til en ved hjelp av variabelen du nettopp har definert.

Etter åpningen

tag, legg til følgende:

 

Navn; ?>

Henter vilkår for den andre taksonomien

Deretter må du hente listelisten for den andre taksonomien. Under koden du nettopp lagt til, sett inn dette:

 0)); ?>

Dette henter en liste over alle vilkårene og lagrer den i en matrise. Ved bruk av 'Hide_empty' Du kan unngå at noen tomme betingelser blir vist - men som du ser snart, forhindrer dette bare at vilkårene blir forespurt, og som ikke har noen innlegg i det hele tatt, ikke de som ikke har innlegg med den aktuelle spørsmålet om taksonomi.

Opprette Loop

Opprett nå en sløyfe som vil løpe for hver av betingelsene:

 'animal', 'animal_cat' => $ animalcat-> slug, 'habitat' => $ term-> slug); $ query = nytt WP_Query ($ args); // utdata termen navn i et overskrift tag ekko '

'. $ term-> navn. 'habitat

'; // utgav posttitlene i en liste ekko '
    '; // Start Loop mens ($ query-> have_posts ()): $ query-> the_post (); ?>
  • ">
  • '; // Bruk nullstill postdata for å gjenopprette orginal spørring wp_reset_postdata (); ?>

Et par notater om dette:

  • For hvert begrep defineres en ny spørring.
  • Argumentene for spørringen inkluderer begrepet i den andre taksonomien ($ sikt) og begrepet som nå blir forespurt ($ animalcat).
  • Hvis taksonomiene bare gjelder for en innleggstype, kan du forlate 'Post_type' argument, men jeg foretrekker å inkludere det bare i tilfelle.
  • De $ sikt variabel brukes til å utføre en tittel for hver seksjon ved bruk av $ Term-> navn.

Lagre nå malfilen din og ta en titt på taksonomiarkivet for en av dine Dyrfamilie vilkår:

Legge til en sjekk for innlegg til hvert søk

I øyeblikket som du kan se, er malen utstedt tomme lister. Dette løses enkelt ved å sjekke om hvert spørsmål har innlegg.

Fest følgende rundt løkken din:

hvis ($ query-> have_posts ()) 

Sløyfen din vil nå se slik ut:

hvis ($ query-> have_posts ()) // skriver ut navnet i et overskrift tag ekko '

'. $ term-> navn. 'habitat

'; // utgav posttitlene i en liste ekko '
    '; // Start Loop mens ($ query-> have_posts ()): $ query-> the_post (); ?>
  • ">
  • ';

Dette forhindrer at WordPress kjører løkken hvis spørringen ikke har noen innlegg, fjerner de tomme overskriftene. Nå ser arkivsiden ut slik:

Mye bedre!

Opprette malfilen for den andre taksonomien

Det siste trinnet er å lage en malfil for den andre taksonomiets arkiver.

Kopier din første malfil og endre den på nytt taksonomi-habitat.php. Rediger det slik at terminologien er riktig. Redigeringene jeg trenger å lage til min fil er:

  • tilpasse kommentarene øverst på filen slik at de er nøyaktige
  • endrer navnet på $ animalcat variabel til $ habitat (Du kan unngå dette problemet ved å gi variabelen et mer generisk navn - men ikke ring det $ sikt som du bruker det andre steder)
  • redigerer

    overskriften slik at den bruker $ habitat variabel for å skrive ut navnet på det nåværende spørsmålet (jeg har også lagt til noen forklarende tekst her som er valgfritt)

  • endrer den første parameteren til get_terms ()fungere slik at den bruker animal_cat sikt, ikke den habitat begrep.
  • redigering av spørringsargumentene, i hovedsak bytte verdiene for 'Animal_cat' og 'Habitat'.
  • redigerer

    Innhold i løkken for å referere til familier som ikke er habitater.

Dette betyr at min nye malfil ser slik ut:

   

habitat - Navn; ?>

0)); ?> 'dyr', 'animal_cat' => $ term-> slug, 'habitat' => $ habitat-> slug); $ query = nytt WP_Query ($ args); hvis ($ query-> have_posts ()) // skriver ut navnet i et overskrift tag ekko '

'. $ term-> navn. 'familie

'; // utgav posttitlene i en liste ekko '
    '; // Start Loop mens ($ query-> have_posts ()): $ query-> the_post (); ?>
  • ">
  • '; // bruk tilbakestill postdata for å gjenopprette orginal spørring wp_reset_postdata (); ?>

Etter å ha gjort disse endringene, lagre den nye malfilen og sjekk ett av arkivene dine:

Du har nå en side for den andre taksonomien som fungerer på samme måte som den første.

Sammendrag

I denne opplæringen har du lært en måte å vise data ved hjelp av flere taksonomier. Du kan ta dette videre ved å jobbe med en tredje taksonomi på to måter:

  1. Gjenta prosessen med å hente vilkår, definere en spørring og kjøre sløyfen for tredje sikt etter andre sikt, slik at du har to separate lister.
  2. Slett dataene dine med alle tre vilkårene ved å bruke hver $ sikt variabel på samme måte som $ habitat eller $ animalcat variabel og legge til en ekstra for hver() uttalelse inne din eksisterende for hver() uttalelse. Du må da tenke på hvordan du legger ut de resulterende dataene ved hjelp av lister eller et rutenett.

Hvorfor ikke ta en tur?