Hvordan jobbe med WordPress Term Meta Term Metadata API

Det første innlegget i denne serien la grunnlaget for å forstå taksonomier, vilkår og forhold i WordPress-sammenheng. Hvis du ikke har lest det enda, og du er helt ny for WordPress-utvikling, så anbefaler jeg deg å lese gjennom det som dette innlegget skal bygge på alt som er dekket i den artikkelen.

Videre, som vi fortsetter med å snakke om flere typer metadata, er det viktig å se gjennom tidligere serier som vi dekket:

  • Legg inn metadata
  • Bruker metadata
  • Kommenter metadata

Grunnen til at det er verdt å gjennomgå disse artiklene, er fordi denne artikkelen kommer til å ligne noen av teknikkene dekket i artiklene, og vil også bygge på noen av strategiene ved å jobbe med lignende APIer.

Fremfor alt har denne opplæringen til formål å gi et gjennomgang av hvordan man arbeider med en av de nyeste metadata-APIene som er tilgjengelige i WordPress.

En ansvarsfraskrivelse for utviklere

Som tidligere nevnt, er denne spesifikke artikkelen rettet mot dem som bare kommer inn i WordPress-utvikling eller som ønsker å øke sine ferdigheter. Så hvis du er en avansert utvikler, er innholdet som er dekket i denne artikkelen, kanskje ikke av interesse for deg.

En av de viktigste tingene å huske når vi arbeider gjennom denne opplæringen er at koden ikke skal brukes i et produksjonsmiljø. Det vil si at det er ment å bare studere API og å forstå hvordan det fungerer.

Koden vi skriver er ikke ment å bli brukt i et prosjekt som skal brukes til et publikum eller en gruppe brukere. Hovedårsaken er at det er emner som sanitisering, validering, rømning og så videre som ligger utenfor omfanget av den forrige serien, så vel som denne serien.

Etter at vi har pakket inn denne artikkelen, går vi videre til mer avanserte emner som de, men for nå skal vi bare fokusere på Term Metadata API.

En oppfriskning om taksonomier og vilkår

Før vi snakker om metadata-API, la oss sørge for at vi alle er på samme side som det gjelder de ulike terminologiene vi skal bruke. Spesielt må vi sørge for at vi forstår taksonomier, vilkår og forholdet mellom de to.

For det første definerer Codex taksonomiene som:

I WordPress er en "taksonomi" en gruppemekanisme for enkelte innlegg (eller linker eller egendefinerte innleggstyper).

I et standard WordPress-installasjon kan du tenke på disse som kategorier og tags. De kan være hierarkiske, som kategorier, eller ikke-hierarkiske like koder.

Vilkår, derimot, er definert som:

I WordPress er et begrep en klassifisering, gruppe eller undergruppe av en Taxonomy, hvor sistnevnte kan være en kategori, tag eller egendefinert taxonomy. Som standard har vilkårene en tittel, en slug og en beskrivelse. Hierarkiske taksonomier som kategorier kan definere en overordnet term.

Til slutt er forholdet mellom taksonomier og vilkår slik at man egentlig ikke kan eksistere uten den andre (spesielt i hierarkiske taksonomier). Det vil si at en kategori taksonomi må ha minst ett begrep knyttet til det; Ikke-hierarkiske taksonomier trenger imidlertid ikke nødvendigvis å følge det.

Med det sagt, la oss komme i gang med å jobbe med Term Metadata API.

Arbeider med API

Som med de andre metadata-APIene som er tilgjengelige, skal vi kunne gjøre ting som:

  • Legg til
  • Oppdater
  • hente
  • slette

Og fordi dette er en ny API, kan det ikke umiddelbart være klart hva noen av fordelene med denne APIen er. Selv om vi bare skal utforske noen av det grunnleggende i denne artikkelen, er det verdt å vurdere bare noen av tingene vi kan gjøre.

For eksempel:

  • Tilknytt farger eller bilder med et begrep
  • Begrens bestemte innlegg som tilhører et begrep
  • Legg til binære data, for eksempel dokumenter eller PDF-filer, for et begrep som kan gjøres tilgjengelig på fronten
  • … og mer.

Selvfølgelig er det mange flere muligheter. Men for nå, la oss se hvordan vi kan innlemme dette inn i vårt arbeid.

Forbereder temaet

For å komme i gang, la oss sørge for at vi er på samme side på hva vi skal bruke for å få dette arbeidet gjort. Spesifikt, her er hva du trenger, og her er det jeg bruker.

  • en IDE-jeg skal bruke Atom
  • En database front-end-Jeg skal bruke Sequel Pro
  • en versjon av WordPress-Jeg skal bruke WordPress 4.4.2
  • et grunnleggende tema-jeg bruker twentysixteen

Når du har alt dette satt opp, så er vi klar til å gå. Hvis du trenger hjelp med å få utviklingsmiljøet ditt satt opp, vennligst se denne artikkelen.

Starter

Det første vi må gjøre er å lage en fil som vil inneholde alt arbeidet som vi skal gjøre i denne opplæringen.

Først må vi opprette tutsplus sikt-metadata.php i roten av twentysixteen tema katalog.

Deretter må vi legge til følgende linje med kode til temaets functions.php-fil. Dette vil sørge for at vi inkluderer vårt arbeid inn i temaet.

Når du oppdaterer nettleseren din, bør du se noe som følgende bilde:

Det bør ikke være noen feilutgang, og det skal fungere som om ingenting har endret seg. Til slutt, hvis du jobber med en ny installasjon av WordPress, må termen metadatabord se helt tom ut:

For å sikre at vi har en kategori som vi jobber med, må du fortsette og opprette en ny kategori i WordPress-installasjonen. Jeg skal lage en kalt Hoved og sørg for at Hei Verden er stemplet med dette.

Når du er ferdig, ta en titt på vilkårstabellen i databasen for å få tak i term_id. I mitt tilfelle, term_id er 2. Din kan variere, men poenget er at du vet at ID av det aktuelle begrepet:

Vær oppmerksom på at vi skal bruke dette gjennom hele opplæringen.

Legge til metadata

For å komme i gang er det viktig å gjenkjenne det add_term_meta funksjonen kan tjene to formål:

  1. Funksjonen kan skape ikke-unike verdier assosiert med en enkelt term ID og en enkelt metatast.
  2. Funksjonen kan skape unike verdier assosiert med en enkelt term ID og en enkelt metatast.

Funksjonen aksepterer en term ID, en metatast, en meta verdi og en valgfri boolesk verdi som bestemmer hvorvidt verdien som lagres er unik eller ikke.

Unike verdier

La oss først lage en unik verdi i databasen. Skriv inn følgende kode i redigeringsprogrammet, oppdater Hei Verden, og så se termmeta bord. 

term_id; hvis (1 === get_the_ID () && 2 === $ term_id) add_term_meta ($ term_id, 'my_meta_key', 'my_meta_value', true);  returner $ innhold  

Du bør se informasjonen din.

Hvis du endrer metaværdien og oppdaterer siden, bør du legge merke til at verdien i databasen har ikke endret. Dette skyldes at du har sagt at dette skal være en unik verdi, og den første verdien som er skrevet, vil ikke bli endret eller overskrevet. 

Dette kan oppnås med update_term_meta, men vi ser øyeblikkelig på koden.

Ikke-unike verdier

Før vi ser på hvordan vi kan oppdatere term meta, skjønner vi at vi kan legge til flere verdier til samme meta-nøkkel og samme termen ID. Koden nedenfor ser ut som koden ovenfor, bortsett fra at vi ikke overfører sanne til funksjonen.

term_id; hvis (1 === get_the_ID () && 2 === $ term_id) for ($ i = 0; $ i < 3; $i++ )  $meta_value = "my_meta_value_$i"; add_term_meta( $term_id, 'non_unique_key', $meta_value );   return $content; 

Forfriske Hei Verden noen ganger og så ta en titt på databasen. Du bør se noe slikt:

Gir mening? I utgangspunktet, når du sier at du vil ha en unik verdi, vil den første verdien du oppgir, fortsette som bare verdi (med mindre du oppdaterer eller sletter det). 

Hvis du derimot ikke spesifiserer at du vil ha en unik verdi, kan du lagre så mange verdier som du vil ha med begrepet ID og meta-nøkkelen.

Dette fører imidlertid til å hente informasjon og slette informasjon forskjellig fra databasen; Vi vil se nærmere på dette i senere artikkel.

Oppdaterer metadata

API-funksjonen update_term_meta gir oss et par fine alternativer. Først gir den oss muligheten til å legge til en enkelt, unik innføring i databasen uten å måtte bruke den fjerde parameteren til add_post_meta.

For det andre tillater det oss å oppdatere et bestemt metadata så lenge vi vet hva den forrige verdien var. La oss ta en titt på begge disse tilfellene gitt den nåværende tilstanden til databasen vår.

Legge til unike data

For å legge til unike metadata kan vi ringe som ligner på det vi så i det første eksemplet til add_term_meta. I stedet bruker denne gangen denne gangen update_term_meta. For eksempel, gjennomgå følgende kode:

term_id; hvis (1 === get_the_ID () && 2 === $ term_id) update_term_meta ($ term_id, 'update_key', 'my_unique_update_value');  returner $ innhold 

Forfriske Hei Verden et par ganger og uansett hvor mange ganger du oppdaterer det, ser du en enkelt verdi som er angitt i databasen. Hvis du følger med koden, bør du se noe slikt:

Men hva skjer når det er flere poster med samme meta-nøkkel, og vi vil oppdatere dem?

Oppdaterer et ikke-unikt opptak

For å oppdatere en plate som har samme termen ID og samme meta-nøkkel, er det viktig å kjenne den forrige verdien. I vårt tilfelle vet vi at vi har en verdi som kalles my_meta_value_1

For det formål kan vi oppdatere denne spesifikke raden ved å angi den nye verdien og den gamle verdien i update_term_meta funksjon. For å gjøre dette, ta en titt på følgende kode:

term_id; hvis (1 === get_the_ID () && 2 === $ term_id) update_term_meta ($ term_id, 'non_unique_key', 'my_meta_value_1_updated', 'my_meta_value_1');  returner $ innhold 

Og deretter oppdatere Hei Verden. Når det er gjort, må den oppdaterte metaværdien se slik ut:

Hvis du ikke ser det samme resultatet, må du passe på at du har riktig angitt riktig funksjonsnavn i kroken din, skrivetids-ID, høyre metatast og riktig forrige meta-verdi.

Henter metadata

For å få metadataene som vi har hentet, kan vi bruke get_term_meta funksjon. 

Vær imidlertid oppmerksom på at når vi henter termemetadata, kan det hende vi har en meta-nøkkel som har flere verdier knyttet til den. Eller vi kan behandle en metatast som bare har en enkelt verdi.

Avhengig av situasjonen må vi spesifisere forskjellig informasjon til funksjonen. 

Henter alle metadata

Å hente alle metadataene som er knyttet til et enkelt begrep, er enkelt, som koden nedenfor viser. Den viktigste tingen å være oppmerksom på er at resultatene returneres i en matrise. 

I eksemplet nedenfor skal vi bruke non_unique_key som vår meta nøkkel siden den har flere verdier knyttet til den.

term_id; hvis (1 === get_the_ID () && 2 === $ term_id) get_term_meta ($ term_id, 'non_unique_key');  returner $ innhold 

Du kan velge å ekko resultatene ut på skjermen, du kan velge å bruke var_dump, eller du kan velge å bruke en debugger for å vise informasjonen. Uansett, bør du se noe som følger som resultatene dine:

array (3) [0] => streng (15) "my_meta_value_0" [1] => streng (23) "my_meta_value_1_updated" [2] => streng (15) "my_meta_value_2"

Gitt denne utgangen, kan du velge å lagre den i en variabel og deretter hente en bestemt verdi fra en gitt indeks. Eller kanskje du ville velge å sløyfe gjennom dataene og lese eller manipulere det.

Uansett brukssak, kan du hente all informasjon som er knyttet til en metatast.

Henter et enkelt stykke metadata

Når vi snakker om å hente et enkelt stykke metadata, betyr det normalt at vi ser på å hente en post fra mange (som i vårt eksempel ovenfor); Det kan imidlertid være tilfeller der vi ønsker å hente en enkelt metaværdi assosiert med en enkelt metatast.

Vi snakker om det senere tilfellet på et øyeblikk. Men først, la oss dekke tilfellet der vi ønsker å hente en enkelt verdi fra et sett med data som har samme term ID og samme meta-nøkkel.

Legg merke til i koden under, vi passerer en fjerde verdi, ekte:

term_id; hvis (1 === get_the_ID () && 2 === $ term_id) get_term_meta ($ term_id, 'non_unique_key', true);  returner $ innhold 

Og her er det som returneres:

streng (15) "my_meta_value_0"

Merk at dette returnerer den første verdien som den finner, og det gjør det i form av en streng.

Hva om det bare er én post?

Hvis det bare er en plate, har du to alternativer:

  1. Du kan hente informasjonen uten å spesifisere ekte.
  2. Du kan hente informasjonen ved å spesifisere ekte.

Hvis du velger det første tilfellet, kommer du til å komme tilbake en matrise med en enkelt indeks og en enkelt verdi. Som sådan må du hente verdien ut av resultatet ved å gjøre noe sånt $ verdi = $ resultat [0] forutsatt at du lagrer resultatet av funksjonsanropet i $ resultat.

På den annen side, hvis du velger det andre alternativet, kan du forvente å få resultatet returnert til deg som en string.

Det viktigste er å merke seg om nærmer seg verdiene denne strategien er at verdiene er unike gitt deres meta-nøkkel.

Slette metadata

Til slutt må vi ta en titt på å fjerne de tilknyttede metadataene. Og i tråd med resten av eksemplene våre, avhenger dette av om det finnes flere stykker metadata knyttet til en meta-nøkkel eller en enkelt metaværdi assosiert med en meta-nøkkel.

Slette alle poster

Hvis du vet at det finnes en enkelt metatast som har flere verdier knyttet til det, kan du bruke følgende kode:

term_id; hvis (1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'non_unique_key');  returner $ innhold  

Og det vil oppdatere databasetabellen slik at det ser slik ut:

Hvis du har fulgt med, vet du at dette fjernet alle dataene som er knyttet til non_unique_key metatast.

Slette en enkelt post

Hvis du vil slette en enkelt plate, er det to måter å gjøre dette på:

  1. Du vet meta-verdien som er knyttet til metatasten som du vil slette.
  2. Verdien som er knyttet til den angitte metatasten, er unik ved at metastasten og metaværdien er unik.

Til dette formål tar vi en titt på det første eksemplet i denne delen, og vi tar en titt på det andre eksemplet i denne delen.

For å slette en enkelt post der vi kjenner den tilknyttede metaværdien, kan vi skrive kode som spesifiserer både metatasten og metaværdien. For eksempel:

term_id; hvis (1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'my_meta_key', 'my_meta_value');  returner $ innhold 

Dette fjerner raden som er knyttet til denne informasjonen fra databasen.

Slette en unik plate

Til slutt, hvis det er en enkelt unik post der du kjenner meta-tasten, men du ikke kjenner meta-verdien, kan du fortsatt slette denne posten fra databasen.

Alt du trenger å spesifisere i kildekoden er metatasten. Se i følgende funksjon:

term_id; hvis (1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'update_key');  returner $ innhold 

Astute lesere vil sannsynligvis fange at funksjonen ovenfor er den samme funksjonen definisjonen som vi ga når du sletter poster som har alle flere verdier. Og det er fordi de er det samme.

Forskjellen er imidlertid hensikt av funksjonen. En funksjons hensikt vil ofte drive hvordan vi navngir funksjonen. I det forrige tilfellet ønsket vi å slette alle metadataene i termen. I dette tilfellet ønsket vi å slette en enkelt termisk metadata.

Dette har implikasjoner når det gjelder å skrive kvalitetskode og når det gjelder å skrive enhetstester.

Full kildekoden

Her skal du finne all koden vi har brukt i hele dette innlegget, sammen med flere kommentarer som forklarer hva som skjer i koden. Husk at alle disse funksjonene er koblet til innholdet, som betyr at funksjonene vil brenne hver gang innlegget lastes inn.

Som sådan, den add_filter Samtaler blir kommentert slik at du kan aktivere dem etter behov.

term_id; hvis (1 === get_the_ID () && 2 === $ term_id) add_term_meta ($ term_id, 'my_meta_key', 'my_meta_value_changed', true);  returner $ innhold  // add_filter ('the_content', 'tutsplus_add_term_metas'); / ** * Hvis vi er på det første innlegget og i kategorien som har * ID av '2', legger vi til flere meta-verdier med samme * meta-nøkkel til begrepet metadata. * * @param string $ content Innleggets innhold. * @return string Innleggets innhold. * / funksjon tutsplus_add_term_metas ($ content) $ category = get_the_category (); $ term_id = $ kategori [0] -> term_id; hvis (1 === get_the_ID () && 2 === $ term_id) for ($ i = 0; $ i < 3; $i++ )  $meta_value = "my_meta_value_$i"; add_term_meta( $term_id, 'non_unique_key', $meta_value );   return $content;  //add_filter( 'the_content', 'tutsplus_update_term_meta' ); /** * Updates the term meta value with the specified key. If the value * doesn't exist, then the record will be created. This will only * be added if the 'Hello World' page is loaded with the category * having the ID of '2'. * * @param string $content The post content. * @return string The post content. */ function tutsplus_update_term_meta( $content )  $category = get_the_category(); $term_id = $category[0]->term_id; hvis (1 === get_the_ID () && 2 === $ term_id) update_term_meta ($ term_id, 'update_key', 'my_unique_update_value');  returner $ innhold  // add_filter ('the_content', 'tutsplus_update_term_metas'); / ** * Oppdaterer den eksisterende verdien for metadataene som har meta-nøkkelen 'non_unique_key' * med den angitte metaværdien. Dette skjer bare hvis vi er på * innlegget med ID for en og den har kategorien ID for '2'. * * @param string $ content Innleggets innhold. * @return string Innleggets innhold. * / funksjon tutsplus_update_term_metas ($ content) $ category = get_the_category (); $ term_id = $ kategori [0] -> term_id; hvis (1 === get_the_ID () && 2 === $ term_id) update_term_meta ($ term_id, 'non_unique_key', 'my_meta_value_1_updated', 'my_meta_value_1');  returner $ innhold  // add_filter ('the_content', 'tutsplus_get_term_metas'); / ** * Hvis vi er på det første innlegget og innlegget har kategorien ID for '2' så ​​* henter termen meta i form av en matrise. * * @param string $ content Innleggets innhold. * @return string Innleggets innhold. * / funksjon tutsplus_get_term_metas ($ content) $ category = get_the_category (); $ term_id = $ kategori [0] -> term_id; hvis (1 === get_the_ID () && 2 === $ term_id) get_term_meta ($ term_id, 'non_unique_key');  returner $ innhold  // add_filter ('the_content', 'tutsplus_get_term_meta'); / ** * Hvis vi er på det første innlegget og posten har kategorien ID av '2', henter * den første verdien fra metadataene som en streng. * * @param string $ content Innleggets innhold. * @return string Innleggets innhold. * / funksjon tutsplus_get_term_meta ($ content) $ category = get_the_category (); $ term_id = $ kategori [0] -> term_id; hvis (1 === get_the_ID () && 2 === $ term_id) get_term_meta ($ term_id, 'non_unique_key', true);  returner $ innhold  // add_filter ('the_content', 'tutsplus_delete_term_metas'); / ** * Hvis vi er på det første innlegget og posten har kategoridokumentet for '2', slettes * metaverdiene som er knyttet til den angitte nøkkelen. * * @param string $ content Innleggets innhold. * @return string Innleggets innhold. * / funksjon tutsplus_delete_term_metas ($ content) $ category = get_the_category (); $ term_id = $ kategori [0] -> term_id; hvis (1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'non_unique_key');  returner $ innhold  // add_filter ('the_content', 'tutsplus_delete_term_meta'); / ** * Hvis vi er på det første innlegget og posten har kategoridokumentet for '2', slettes * den angitte metaværdien som er knyttet til den angitte metatasten. * * @param string $ content Innleggets innhold. * @return string Innleggets innhold. * / funksjon tutsplus_delete_term_meta ($ innhold) $ category = get_the_category (); $ term_id = $ kategori [0] -> term_id; hvis (1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'my_meta_key', 'my_meta_value');  returner $ innhold  // add_filter ('the_content', 'tutsplus_delete_single_term_meta'); / ** * Hvis vi er på det første innlegget og posten har kategoridokumentet for '2', slettes * metaverdiene som er knyttet til den angitte nøkkelen. * * @param string $ content Innleggets innhold. * @return string Innleggets innhold. * / funksjon tutsplus_delete_single_term_meta ($ innhold) $ category = get_the_category (); $ term_id = $ kategori [0] -> term_id; hvis (1 === get_the_ID () && 2 === $ term_id) delete_term_meta ($ term_id, 'update_key');  returner $ innhold  

Det er ikke uvanlig å finne funksjoner som dette hekta i en annen krok som lagre post eller noe lignende. Dette er noe som vi vil dekke mer detaljert i en avansert opplæring senere i år.

Konklusjon

For de som har fulgt denne serien og den forrige serien som arbeider med resten av metadata-API, bør mye av materialet dekket i denne serien ikke være for vanskelig å forstå.

Kanskje den vanskeligste delen av å jobbe med denne API-en, utøver din kreativitet på mange måter som faktisk kan brukes. Men siden vi har dekket hvordan å jobbe med API, å sette det på jobb bør ikke være veldig vanskelig.

Husk at vi i de kommende ukene skal se på avanserte og rette teknikker for å skrive og lese informasjon i databasen slik at vi er i stand til å jobbe med dem i et produksjonsmiljø.

I mellomtiden, hvis du leter etter andre verktøy for å hjelpe deg med å bygge ut ditt voksende sett med verktøy for WordPress eller koden for å studere og bli mer kjent med WordPress, ikke glem å se hva vi har tilgjengelig i Envato Marked.

Husk at du kan fange alle mine kurs og opplæringsprogrammer på min profilside, og du kan følge meg på bloggen min og / eller Twitter på @tommcfarlin hvor jeg snakker om ulike programvareutviklingspraksis og hvordan vi kan bruke dem i WordPress.

Ikke nøl med å legge igjen noen spørsmål eller kommentarer i feedet under, og jeg vil sikte på å svare på hver av dem.

Beslektede ressurser

  • Egendefinerte felt
  • get_the_category
  • add_term_meta
  • update_term_meta
  • get_term_meta
  • delete_term_meta
  • ekko
  • var_dump