I den første delen av denne serien på data i WordPress ga jeg en oversikt over WordPress database tabeller, og hvilke tabeller brukes til å lagre hva slags data. I denne andre delen skal jeg skissere hvordan WordPress styrer forholdet mellom disse dataene.
Som du ser, bruker WordPress tre typer datatilknytning - en-til-en, en til mange og mange til mange. Jeg ser på hver av disse og hva de betyr for ditt WordPress-nettsted.
Et ett-til-ett-forhold er det enkleste forholdet til alle - det betyr bare at en plate er relatert til bare en annen. Data som dette lagres vanligvis i ett bord (men ikke alltid, som vi senere vil se i denne opplæringen).
Eksempler på en-til-en-relasjoner i WordPress inkluderer:
Listen kunne fortsette, men hovedpoenget er at noen to poster som er lagret i forskjellige felter i en rad av et bord, har et ett til ett forhold.
En-til-en-relasjoner er imidlertid den minst interessante typen databaseforhold. Så uten videre, la oss gå videre til en relasjonstype som brukes mye av WordPress - en til mange.
Et til mange forhold er svært vanlige i databaser, og er det som gjør en database kraftigere enn et "flatt" bord, for eksempel et regneark. Disse forekommer når en plate har et forhold til mer enn en annen plate.
I WordPress er de fleste en-til-mange relasjoner opprettet av en kobling mellom to databasetabeller, ved hjelp av en unik identifikator for å bli med i de to. Så for eksempel, POST_ID
posten vil være unik for hvert innlegg lagret i wp_posts
bord, men vil også bli brukt i wp_comments
tabell for å identifisere hvilket innlegg hver kommentar ble postet til. Dette betyr at hver POST_ID
verdien vil bare vises en gang i wp_posts
bord, men kan vises flere ganger - eller ikke i det hele tatt - i wp_comments
bord.
Noen andre eksempler i WordPress inkluderer:
Igjen fortsetter listen. Siden dette er et viktig tema i WordPress, kan vi se nærmere på de en-til-mange relasjonene.
Tabellen som er koblet til de fleste andre tabeller, er wp_posts
bord, og de fleste forholdene disse forbindelsene oppretter, er en til mange relasjoner.
Som du kan se i diagrammet nedenfor, er wp_posts
bordet er koblet til fire andre tabeller:
I tillegg til dette kan innlegg også ha et til mange forhold til andre innlegg, i form av vedlegg eller foreldresider.
La oss se nærmere på disse relasjonene.
Som forklart ovenfor, data lagret i wp_posts
Tabellen kan ha et til mange forhold til andre data i samme tabell; Dette forholdet er imidlertid ikke mellom det du vil tenke på som innlegg, men i stedet er det mellom innlegg og vedlegg eller sider og andre sider. Tross alt er vedlegg og sider posttyper.
Et vedlegg som er lagret i wp_posts
bordet vil ha en post i post_parent
feltet, som vil være ID for innlegget som vedlegget er vedlagt (med unnskyldninger for repetisjonen!). Dette er et til mange forhold fordi hvert vedlegg kun har en forelder, mens hvert innlegg kan ha mange vedlegg. Dette gjelder selv om du har brukt Media Manager til å legge til et vedlegg til et annet innlegg - bare innlegget som det ble opprinnelig lagt til, blir lagret i databasen som foreldre.
Innlegg kan også ha et til mange forhold til andre innlegg når en side er angitt som forelder til en annen. Posten er lagret mot barnesiden, i post_parent
feltet - igjen vil dette være POST_ID
av foreldresiden. Dette er en til mange forhold fordi foreldresider kan ha mange barnesider, men barnesider vil bare ha en foreldreside.
Når du tenker på forhold mellom innlegg som dette, er det viktig å huske at når du vurderer WordPress-datahåndtering, er innlegg ikke det du vanligvis refererer til som innlegg. De inkluderer sider, vedlegg og andre innleggstyper, som alle er lagret i wp_posts
bord.
Post-metadata lagres i sitt eget bord wp_postmeta
. Denne tabellen inneholder bare fire felt - for POST_ID
, de meta_id
, nøkkelen og verdien. Ett innlegg kan ha mange elementer av postmetadata knyttet til det, men hver post-metadataoppføring vil bare være knyttet til ett innlegg.
Kommentarer har også eget bord, wp_comments
. Hver kommentar vil bare forholde seg til ett innlegg mens hvert innlegg kan ha flere kommentarer lagret imot det. Som med alle de andre tabellene knyttet til wp_posts
, de POST_ID
feltet brukes til lenken (i comment_post_id
feltet i wp_comments
).
De wp_comments
Tabellen har som standard 15 felt, for å lagre data om forfatteren, forfatterens e-postadresse, selve kommentaren og godkjenningsstatusen. Det er også knyttet til wp_users
bord, som vi ser i neste avsnitt.
Kommentarer har også egne metadata, lagret i et annet bord, som jeg kommer til kort tid.
Hvert innlegg er knyttet til wp_users
bord via bruker-ID
post, som er lagret i post_author
feltet i wp_posts
. Dette er en til mange forhold fordi hvert innlegg har bare en forfatter, men hver bruker kan være forfatter av flere innlegg.
Forholdet mellom innlegg og brukere er forskjellig rom som mellom innlegg og kommentarer eller metadata fordi naturen er av en bruker, flere innlegg, ikke en post flere kommentarer eller mete data poster. Dette er grunnen til at bruker-ID
feltet gir lenken i stedet for POST_ID
felt.
Det er også tre relasjoner som er en til mange og ikke involverer innlegg. To av disse involverer metadata - forholdet mellom kommentarer og deres metadata, og brukere og deres metadata.
WordPress lagrer ytterligere metadata om brukere i wp_usermeta
bord. Dette brukes vanligvis til ikke-standarddata om brukere, for eksempel metadata om superadminer i en flersidet installasjon og metadata om adminfarger som en bruker har valgt hvis disse ikke er standard.
De fleste dataene på brukerne vil være i wp_users
bord. De to tabellene er koblet via bruker-ID
feltet og en brukeroppføring vil ha flere elementer med metadata knyttet til det, mens hvert element med metadata kun gjelder for en bruker.
Igjen, de fleste data om kommentarer lagres i wp_comments
bord sammen med selve kommentaren, men wp_commentmeta
Tabellen brukes til å lagre ytterligere metadata, for eksempel data opprettet av plugins som Akismet. Forholdet er det samme som mellom brukere og usermeta.
Det endelige til mange forholdet er mellom kommentarer og brukere. De wp_comments
bordet inneholder bruker-ID
feltet, som kan brukes til å lagre bruker-IDen når en innlogget bruker har lagt inn en kommentar. Merk at dette feltet ikke er obligatorisk for de nettstedene der brukerne ikke må logges inn for å kommentere.
Den endelige typen databaseforhold er det ene til mange forholdet, hvor den mange koblingen går begge veier. Dette brukes bare en gang i WordPress, for taksonomi betingelser (inkludert kategorier og koder som disse er bare taksonomier). Ett innlegg kan ha mange vilkår som er tildelt det, og ett begrep kan tilordnes flere innlegg.
WordPress oppretter dette forholdet på samme måte som enhver annen database med manag-til-mange-database: ved å bruke en midlertidig tabell som knytter de to tabellene sammen med nøkkeldataene. Dette er wp_term_relationships
bord, som kobler til wp_posts
bord til wp_term_taxonomy
bord.
Merk: Denne tabellen knytter også til wp_links
bord til wp_term_taxonomy
bord, som lenker oppfører seg på samme måte som innlegg - jeg kommer snart til koblinger.
Dette er lettest forklart ved å se først på de to yttertabellene. De wp_posts
Tabellen inneholder data på hvert innlegg, mens wp_term_taxonomy
Tabellen inneholder data på hvert begrep, inkludert taksonomien den er i og dens ID.
For å opprette en kobling mellom et begrep i wp_term_taxonomy
bord og et innlegg i wp_posts
tabell, skaper WordPress en post i wp_term_relationships
bord, som inkluderer POST_ID
og term_id
(lagret som object_id
og term_taxonomy_id
henholdsvis i wp_term_relationships
bord). Dette betyr at wp_term_relationships
Tabellen kan inneholde flere poster for hvert innlegg og flere poster for hvert begrep, og skaper det mange til mange forhold.
Diagrammet nedenfor viser hvordan dette fungerer:
I eksemplet ovenfor har innleggene følgende vilkår:Du kan også se på den den andre veien - for eksempel gjelder term 3 for innlegg 1 og 4.
Men det stopper ikke der. Det er et fjerde bord, den wp_terms
bord. Dette inneholder data om hvert begrep, nemlig navnet, sluggen og beskrivelsen for hvert begrep. Hvert sikt har bare en post i wp_terms
bord, så forholdet mellom det og wp_term_taxonomy
bordet er faktisk en-til-en. Teoretisk sett er det ingen grunn til at disse dataene ikke kunne holdes i wp_term_taxonomy
bord, men det er det ikke.
Lenker, eller blogrollen, er en funksjon av WordPress som er langt mindre fremtredende enn det en gang var. Faktisk, siden versjon 3.5 koblinger er slått av i administratoren som standard; De har imidlertid sitt eget bord: wp_links
bord.
Dette ligner veldig på wp_posts
bord. Tross alt er koblinger en innholdstype som ligner på innlegg) og har det samme mange til mange forhold med taksonomi.
Som vi har sett, bruker WordPress en rekke forhold for å koble data i 10 av sine 11 databasetabeller. Det eneste tabellen jeg ikke har nevnt her er wp_options
, fordi det ikke er koblet til noen andre tabeller, da det bare lagrer data om nettstedet, heller enn om innhold. Jeg vil dekke det mer detaljert senere i denne serien.
Ved å forstå en-til-en, en til mange og mange til mange relasjoner i WordPress, kan det hjelpe deg med å identifisere måter å manipulere dataene dine og skrive tilpassede spørringer i temaet og / eller pluginene dine..
I neste del av denne serien vil jeg dekke innholdstypene mer detaljert, se på hvilke typer innhold som er lagret i WordPress-databasen og likhetene og forskjellene mellom dem.