I den första delen av denna serie om data i WordPress gav jag en översikt över WordPress databas tabeller, och vilka tabeller används för att lagra vilken typ av data. I den här andra delen ska jag beskriva hur WordPress hanterar relationerna mellan dessa data.
Som du ser, använder WordPress tre typer av datarelationer - en-till-en, en till många och många till många. Jag ska titta på var och en av dessa och vad de betyder för din WordPress-webbplats.
Ett ett-till-ett-förhållande är det enklaste förhållandet för alla - det betyder helt enkelt att en post är relaterad till bara en annan. Data som detta lagras vanligtvis i ett bord (men inte alltid, som vi kommer se senare i denna handledning).
Exempel på en-till-ett-relationer i WordPress är:
Listan kan fortsätta, men huvuddelen är att alla två poster som lagras i olika fält i en rad i ett bord har ett ett-till-ett-förhållande.
En-till-en-relationer är dock den minst intressanta typen av databasförhållande. Så utan vidare, låt oss gå vidare till en relationstyp som används mycket av WordPress - en till många.
Ett till många förhållanden är mycket vanliga i databaser, och det gör en databas kraftigare än ett "platt" bord, som ett kalkylblad. Dessa uppstår när en post har ett förhållande med mer än en annan post.
I WordPress skapas de flesta ett till många relationer med en länk mellan två databastabeller, med hjälp av en unik identifierare för att ansluta sig till de två. Så till exempel, post_id
posten kommer att vara unik för varje post som är lagrad i wp_posts
bord, men kommer också att användas i wp_comments
tabell för att identifiera vilken post varje kommentar var postad till. Detta innebär att varje post_id
värdet kommer bara att visas en gång i wp_posts
bord men kan visas flera gånger - eller inte alls - i wp_comments
tabell.
Några andra exempel i WordPress inkluderar:
Återigen fortsätter listan. Eftersom detta är ett viktigt ämne i WordPress, låt oss ta en titt på en-till-många relationer mer detaljerat.
Tabellen som är kopplad till de flesta andra tabeller är wp_posts
bord och de flesta av de förhållanden som dessa kopplingar skapar är ett till många relationer.
Som du kan se i diagrammet nedan, wp_posts
bordet är kopplat till fyra andra tabeller:
Dessutom kan inlägg också ha ett ett till många förhållande med andra inlägg, i form av bilagor eller föräldersidor.
Låt oss ta en titt på dessa relationer mer detaljerat.
Som förklarats ovan lagras data som lagras i wp_posts
Tabellen kan ha ett till många förhållande med andra data i samma tabell. Detta förhållande ligger dock inte mellan vad du skulle tänka på som inlägg, men istället ligger mellan inlägg och bilagor eller sidor och andra sidor. Tillsammans är bilagor och sidor posttyper.
En bilaga som är lagrad i wp_posts
bordet kommer att ha en post i post_parent
fält, vilket kommer att vara ID för posten som bilagan är bifogad (med ursäkta för repetitionen!). Detta är ett till många förhållande eftersom varje bilaga bara har en förälder, medan varje inlägg kan ha många bilagor. Detta gäller även om du har använt Media Manager för att lägga till en bilaga till ett annat inlägg - bara det inlägg som det ursprungligen lagts till lagras i databasen som förälder.
Inlägg kan också ha ett ett till många förhållande med andra inlägg när en sida anges som förälder till en annan. Posten lagras mot barnsidan, i post_parent
fält - igen blir det här post_id
på modersidan. Detta är ett till många förhållande eftersom föräldersidor kan ha många barnsidor, men barnsidor har bara en föräldersida.
När man tänker på relationer mellan inlägg som detta, är det viktigt att komma ihåg att när man överväger WordPress-datahantering, är inlägg inte vad du normalt hänvisar till som inlägg. De innehåller sidor, bilagor och andra posttyper, som alla lagras i wp_posts
tabell.
Inläggets metadata lagras i sitt eget bord wp_postmeta
. Denna tabell innehåller bara fyra fält - för post_id
, de meta_id
, nyckeln och värdet. Ett inlägg kan ha många poster av metadata som är kopplade till det, men varje postmätadata kommer endast att kopplas till ett inlägg.
Kommentarer har också sitt eget bord, wp_comments
. Varje kommentar kommer att relatera till endast ett inlägg medan varje inlägg kan ha flera kommentarer lagrade mot den. Som med alla andra tabeller kopplade till wp_posts
, de post_id
fält används för länken (i comment_post_id
fält i wp_comments
).
De wp_comments
Tabellen har som standard 15 fält, för att lagra data om författaren, författarens e-postadress, själva kommentaren och dess godkännandestatus. Det är också kopplat till wp_users
bord, som vi ser i nästa avsnitt.
Kommentarer har också egna metadata, lagrade i ett annat bord, som jag kommer till kort tid.
Varje post är bifogad till wp_users
bord via användar ID
post som lagras i post_author
fält i wp_posts
. Detta är ett till många förhållande eftersom varje inlägg bara har en författare men varje användare kan vara författare till flera inlägg.
Förhållandet mellan inlägg och användare är annorlunda som mellan inlägg och kommentarer eller metadata eftersom dess natur är av en användare, flera inlägg, inte en inlägg flera kommentarer eller mete data poster. Det är därför användar ID
fältet ger länken i stället för post_id
fält.
Det finns också tre relationer som är en till många och inte involverar inlägg. Två av dessa involverar metadata - förhållandet mellan kommentarer och deras metadata, och användare och deras metadata.
WordPress lagrar ytterligare metadata om användare i wp_usermeta
tabell. Detta används vanligtvis för icke-standardiserade data om användare, t.ex. metadata om superadminer i en multisite-installation och metadata om de adminfärger som en användare har valt om dessa inte är standard.
De flesta uppgifter om användare kommer att finnas i wp_users
tabell. De två tabellerna är länkade via användar ID
fält och en användarrekord kommer att ha flera objekt av metadata som är associerade med det, medan varje metadata endast gäller för en användare.
Återigen lagras de flesta uppgifterna om kommentarer i wp_comments
bord tillsammans med kommentaren själv, men wp_commentmeta
Tabellen används för att lagra ytterligare metadata, t.ex. data som skapats av plugins som Akismet. Relationen är densamma som mellan användare och usermeta.
Det slutliga ett till många förhållandet är mellan kommentarer och användare. De wp_comments
bordet innehåller användar ID
fält som kan användas för att lagra användarnamnet när en inloggad användare har lagt fram en kommentar. Observera att det här fältet inte är obligatoriskt för de webbplatser där användare inte behöver logga in för att kunna kommentera.
Den slutliga typen av databasförhållande är ett till många förhållande, där den många länken går båda vägarna. Detta används bara en gång i WordPress, för taxonomi termer (inklusive kategorier och taggar eftersom dessa bara är taxonomier). Ett inlägg kan ha många villkor tilldelade det och en term kan tilldelas flera inlägg.
WordPress skapar detta förhållande på samma sätt som alla andra databaser med manag-till-många databaser: genom att använda en mellanliggande tabell som länkar de två tabellerna med nyckeldata. Det här är wp_term_relationships
bord som länkar till wp_posts
bord till wp_term_taxonomy
tabell.
Obs! Den här tabellen länkar också till wp_links
bord till wp_term_taxonomy
bord, som länkar beter sig på ungefär samma sätt som inlägg - jag kommer snart till länkar.
Detta förklaras lättast genom att titta först på de två avvikande tabellerna. De wp_posts
Tabellen innehåller data på varje post, medan wp_term_taxonomy
Tabellen innehåller data på varje term, inklusive den taxonomi den finns i och dess ID.
För att skapa en länk mellan en term i wp_term_taxonomy
bord och ett inlägg i wp_posts
tabell skapar WordPress en post i wp_term_relationships
bord, som inkluderar post_id
och den term_id
(lagrad som object_id
och term_taxonomy_id
respektive i wp_term_relationships
tabell). Detta innebär att wp_term_relationships
Tabellen kan innehålla flera poster för varje post och flera poster för varje term, vilket skapar det många till många förhållandet.
Diagrammet nedan visar hur det här fungerar:
I exemplet ovan har posterna följande villkor:Du kan också titta på det motsatt sätt - till exempel gäller term 3 för inlägg 1 och 4.
Men det slutar inte saker där. Det finns ett fjärde bord, wp_terms
tabell. Detta innehåller data om varje term, nämligen namn, slug och beskrivning för varje term. Varje term har bara en post i wp_terms
bord, så förhållandet mellan det och wp_term_taxonomy
bordet är faktiskt ett till ett. Teoretiskt sett finns det ingen anledning att dessa data inte kunde hållas i wp_term_taxonomy
bord, men det är det inte.
Länkar, eller bloggrollen, är en funktion i WordPress vilket är betydligt mindre framträdande än det en gång var. I själva verket, eftersom version 3.5 länkar har stängts av i admin som standard; De har dock sitt eget bord: wp_links
tabell.
Detta liknar mycket wp_posts
tabell. Trots allt är länkar en innehållstyp som mycket liknar inlägg) och har samma många till många relationer med taxonomi.
Som vi har sett använder WordPress en mängd olika relationer för att länka data i 10 av sina 11 databas tabeller. Det enda tabellen jag inte har nämnt här är wp_options
, eftersom det inte är kopplat till några andra tabeller, eftersom det bara lagrar data om webbplatsen, snarare än om innehåll. Jag kommer att täcka det mer detaljerat senare i denna serie.
Genom att förstå en-till-ett, ett till många och många till många relationer i WordPress, kan det hjälpa dig att identifiera sätt att manipulera dina data och skriva egna frågor i ditt tema och / eller plugins.
I nästa del av denna serie kommer jag att beskriva innehållstyperna mer detaljerat, titta på de typer av innehåll som finns lagrade i WordPress-databasen och likheterna och skillnaderna mellan dem.