Förstå och arbeta med metadata i WordPress

Hittills i denna serie har vi tittat på huvudinnehållstyperna i WordPress. Men vad sägs om de ytterligare uppgifterna om allt innehåll? 

Det är där metadata spelar in.

Som jag behandlade i en tidigare del av denna serie har WordPress fyra huvudinnehållstyper som den lagrar i fyra databasstabeller:

  • inlägg
  • användare
  • kommentarer
  • länkar

De tre första av dessa kan också ha metadata tilldelade dem, och varje har sin egen metadatabord i databasen för att lagra detta.

Vad är metadata?

Metadata kan beskrivas som data om data. Wikipedia definierar två typer av metadata:

Strukturella metadata handlar om design och specifikation av datastrukturer och kallas mer korrekt "data om behållarna med data"; beskrivande metadata, Å andra sidan handlar det om enskilda fall av ansökningsdata, datainnehållet.

Med denna definition använder WordPress beskrivande metadata. Vad vi definierar som data i WordPress och vad som kan definieras som metadata är lite suddigt och motsvarar inte direkt det som lagras i metadataborden. Till exempel:

  • För inlägg, post_type är ett exempel på metadata, men det är lagrat i wp_posts tabell
  • Taxonomy termer, kategorier och taggar kan också definieras löst som metadata, men de lagras helt separat, i sina egna databas tabeller.
  • Posta metadata som anpassade fält och ytterligare metadata som läggs till via plugins lagras i wp_postmeta bord, som du förväntar dig.

Så det är lättare att tänka på metadata i WordPress inte enligt den strikta definitionen av termen, men som de data som lagras i de tre metadataborden.

Metadatabord

WordPress använder tre databastabeller för metadata:

  • wp_postmeta lagrar metadata om inlägg (inklusive bilagor, menyalternativ för navigering och revisioner)
  • wp_commentmeta lagrar metadata om kommentarer
  • wp_usermeta lagrar metadata om användare

Den enda objekttypen i WordPress som inte har metadata är länken.

Metadatabordarna är alla nästan identiska, eftersom de bara har fyra fält:

  • ID är ID för posten, användaren eller kommentaren som metadata avser
  • Meta-ID refererar till metadatapostens ID
  • Nyckeln är metatangenten (som ofta dupliceras mellan olika poster)
  • Värdet är metavärdet (vilket tenderar att vara unikt)

WordPress kan använda denna struktur för att lagra stora kvantiteter av metadata med en enkel struktur. Det innebär att funktionerna som du använder för att visa och fråga metadata för inlägg, användare och kommentarer, är mycket lika.

Metadata lagras av WordPress

Metadata som lagras i en enskild WordPress-installation varierar från den som lagras i en annan installation, eftersom plugins och teman kan lägga till egna metadata och eftersom det i vissa webbplatser måste du definiera specifika metadata medan du i andra inte kommer att göra det. 

Men låt oss ta en titt på några av de vanligaste metadatatyperna:

  • Anpassade fält. Dessa gäller för inlägg som lagras i wp_postmeta tabell. Du kan lägga till dem med hjälp av det vanliga gränssnittet Anpassade fält eller genom att skapa egna metaboxer i efterbehandlingsskärmarna. Detta kan vara särskilt användbart när du vill att användarna ska kunna lägga till metadata i en viss posttyp och du vill göra gränssnittet så användarvänligt som möjligt.
  • Användarmetadata. De wp_usermeta Tabellen lagrar metadata om de flesta användare, till exempel roller, funktioner, instrumentpanelinställningar och till och med för- och efternamn.
  • Metadata adderas av plugins och teman. Plugins med kommentarfunktionalitet som Akismet lägger till metadata i wp_commentmeta tabell, medan plugins som låter dig lägga till metadata i inlägg, till exempel SEO-plugins, lägger till poster i wp_postmeta tabell. Du kan teoretiskt lägga till metadata via ditt tema men det är mer meningsfullt att göra det i ett plugin, eftersom det generellt är relaterat till funktionalitet och inte visas.

Naturligtvis är listan inte begränsad till dessa typer. Faktum är att eventuella uppgifter om inlägg, kommentarer eller användare som inte kan lagras i deras huvuddatatabeller lagras i relevanta metadatabord. 

Om du lägger till ett nytt fält för att lagra data borde du alltid använda dessa tabeller och inte kärntabellerna.

Åtkomst och utmatning av metadata

WordPress har ett metadata API som du använder för att lägga till, ändra, hämta och ta bort metadata. Det finns en rad funktioner specifika för varje typ av metadata som du använder för att mata metadata i dina mallfiler: du borde använda dessa i stället för några generiska metadatafunktioner.

API-funktionerna för metadata för varje innehållstyp är mycket lika och har samma parametrar:


Lägga till metadata Få metadata Uppdatering av metadata Radering av metadata
inlägg add_post_meta () get_post_meta () update_post_meta () delete_post_meta ()
användare add_user_meta () get_user_meta () update_user_meta () delete_user_meta ()
kommentarer add_comment_meta () get_comment_meta () update_comment_meta () delete_comment_meta ()
parametrar $ post_id, $ meta_key, $ meta_value, $ unik (valfri) $ post_id, $ meta_key, $ enda (valfri), 
$ post_id, $ meta_key, $ meta_value, $ prev_value (valfri) $ post_id, $ meta_key, $ meta_value (valfri)

Dessa funktioner kan användas i dina mallfiler och plugins, till exempel i ditt temas enkla postmall, kan du använda följande för att mata ut metadata om posten:

Det här är bara ett väldigt enkelt sätt att mata ut några metadata - det finns många fler möjligheter, av vilka jag senare kommer att täcka i denna serie.

Sammanfattning

WordPress använder tre metadatabord för att lagra data om tre innehållstyper: inlägg, användare och kommentarer. Dessa tabeller används för allt som inte lagras i kärnan wp_posts, wp_users och wp_comments tabeller och tabellerna ska du skriva data till om du lägger till nya fält via teman eller plugins. De tre tabellerna fungerar på nästan identiska sätt och har mycket liknande funktioner som du kan använda för att lägga till, uppdatera, ta bort och få metadata.

Som jag nämnde ovan kan taxonomi termer ses som en annan typ av metadata i WordPress, och det här är vad jag kommer att täcka i nästa del av denna serie.