Inzicht in en werken met gegevens in WordPress - Multisite

In de eerdere delen van deze serie hebben we de verschillende tabellen in de WordPress-database doorgenomen en bekeken welke gegevens ze opslaan, hoe ze met elkaar omgaan en welke functies je gebruikt om met ze te communiceren.

In dit laatste deel ga ik verder met het bekijken van Multisite. De database voor een WordPress Multisite-installatie bevat extra tabellen: een reeks tabellen voor elke site die op het netwerk wordt uitgevoerd en enkele extra tabellen voor het netwerk zelf, evenals de tabellen voor de kernsite. 

Dit betekent dat er drie elementen zijn om te begrijpen hoe de database werkt in Multisite:

  • Databasetabellen voor de kernsite
  • Databasetabellen voor het netwerk
  • Databasetabellen voor elke extra site.

Ik zal beginnen met te kijken hoe WordPress gegevens voor de kernsite opslaat.

Databasetabellen voor de kernsite in Multisite

Voor de kernsite in een netwerk gebruikt WordPress dezelfde 11 databasetabellen als in een installatie met één site:

  • wp_posts
  • wp_postmeta
  • wp_comments
  • wp_commentmeta
  • wp_users
  • wp_usermeta
  • wp_links
  • wp_term_relationships
  • wp_term_taxonomy
  • wp_terms
  • wp_options

Deze bevatten gegevens met betrekking tot de hoofdsite. Twee daarvan zullen ook gegevens bevatten met betrekking tot de rest van het netwerk. Dit zijn:

  • wp_users
  • wp_usermeta

De andere negen tabellen werken op dezelfde manier als voor een enkele site: ze slaan gegevens op over de inhoud van de hoofdsite. In de laatste twee tabellen worden echter ook gebruikersgegevens opgeslagen die relevant zijn voor het hele netwerk, evenals gebruikersgegevens die alleen door de kernsite worden gebruikt. Ik zal dit in een ogenblik onderzoeken.

Databasetabellen voor het netwerk

Naast het opslaan van gebruikersgegevens voor het hele netwerk in twee van de kerntabellen, maakt WordPress ook extra tabellen in een multisite-installatie die gegevens bevatten met betrekking tot het netwerk en zijn sites. 

Dit zijn:

  • wp_blogs
  • wp_blog_versions
  • wp_registration_log
  • wp_signups
  • wp_site
  • wp_sitemeta
  • wp_sitecategories (Optioneel)

WordPress gebruikt deze zeven (of zes) tabellen plus de twee gebruikerstabellen om alle gegevens over het Multisite-netwerk op te slaan. Dit is wat elk van hen opslaat:

Tafel Gegevens Notes
wp_blogs In dit veld worden details van elke site in het netwerk opgeslagen, zodat deze slechts één record voor elke site heeft. Velden omvatten blog_id, domein, geregistreerd (de gegevens waarop de site is gemaakt) en laatst bijgewerkt (nogmaals, een datum).
wp_blog_versions De huidige databaseversie voor elke site, bijgewerkt wanneer u het netwerk bijwerkt. Drie velden: blog_id, db_version en laatst bijgewerkt
wp_registration_log De beheerder die is gemaakt toen elke site werd geregistreerd Voor elke site (geïdentificeerd door blog_id), slaat de tabel de gebruikersnaam voor de beheerder, hun e-mailadres en de datum waarop ze zich hebben geregistreerd.
wp_signups Slaat gegevens op sites die zijn aangemeld voor maar niet zijn geactiveerd Velden bevatten een uniek signup_id voor elke record, waarvoor het domein is aangemeld, de titel, de gebruikersaanmelding en het e-mailadres. Zodra een site is geactiveerd, wordt deze record verwijderd en wordt een record aangemaakt in wp_blogs.
wp_site Slaat de URL op voor de hoofdsite Deze tabel heeft slechts één record met drie velden: de id van de hoofdsite (welke zal zijn 1), het domein en het pad (normaal /)
wp_sitemeta Slaat metadata op voor het netwerk Deze tabel is het equivalent van wp_options voor het hele netwerk. Het bevat alle metadata met betrekking tot de netwerkinstellingen plus kleinere hoeveelheden metadata voor afzonderlijke sites. Het heeft vier velden: een uniek meta_id, Website ID (met links naar wp_blogs), meta_key en meta_value.
wp_sitecategories Optionele tabel alleen gemaakt als algemene voorwaarden zijn ingeschakeld voor een site. Als u algemene voorwaarden inschakelt, kunt u termen op meerdere sites in het netwerk gebruiken. De tabel (als deze is gemaakt), heeft vier velden: cat_id, CAT_NAME, category_nicename en laatst bijgewerkt. Merk op dat deze tabellen termen opslaan, niet alleen categorieën, ondanks de veldnamen.
wp_users Gegevens over alle gebruikers worden hier opgeslagen in plaats van voor elke site, omdat individuele gebruikers toegang hebben tot meerdere sites op het netwerk. In een Multiste installtie maakt WordPress twee extra velden in de wp_users tabel: spam en verwijderd, beide zijn Booleaanse waarden die standaard worden gebruikt NEE.
wp_usermeta De wp_usermeta tabellen slaat alle metadata op voor alle sitegebruikers De tabel wordt op dezelfde manier gebruikt als voor een installatie op één site.

Relaties tussen de tabellen

De meeste van deze tabellen zijn gerelateerd aan de wp_blogs tafel via de blog_ID veld, aangezien alle gegevens die nodig zijn voor de sites in het netwerk moeten worden gekoppeld aan de kernrecord van de site. De uitzonderingen zijn:

  • wp_sitecategories, welke links naar berichten en andere inhoud
  • wp_signups, omdat dit nog geen geregistreerde sites zijn
  • wp_usermeta, die een indirecte link heeft naar wp_blogs via wp_users

Zie de Codex-pagina in de database voor meer informatie over elk van deze tabellen en hun velden.

Databasetabellen voor sites in een netwerk

De manier waarop WordPress de gegevens opslaat voor elk van de sites in uw netwerk is redelijk eenvoudig: het maakt meerdere kopieën van elk van de databasetabellen, één voor elke site. Er worden echter geen extra exemplaren van gemaakt wp_users en wp_usermeta zoals deze allemaal zijn opgeslagen in de hoofdtabel.

Om onderscheid te maken tussen de tabellen voor elke site, voegt WordPress de site-ID toe aan de tabelnaam, dus bijvoorbeeld voor site 2, wp_posts wordt wp_2_posts.

Elke site heeft de volgende tabellen:

  • wp_xx_posts
  • wp_xx_postmeta
  • wp_xx_comments
  • wp_xx_commentmeta
  • wp_xx_links
  • wp_xx_term_relationships
  • wp_xx_term_taxonomy
  • wp_xx_terms
  • wp_xx_options

De xx hierboven zal worden vervangen door de numerieke site-ID. Al deze tabellen slaan gegevens op dezelfde manier op voor elke site zoals ze zouden zijn als de site een enkele site-installatie zou zijn.

Samenvatting

Als u gegevens van een WordPress Multisite-installatie manipuleert, ophaalt of verplaatst, is het belangrijk om te begrijpen op welke manieren Multisite gegevens anders bewaart dan een installatie op meerdere locaties.. 

Zoals ik heb laten zien, zijn er drie belangrijke elementen: tabellen die worden gebruikt voor de kernsite; tabellen die worden gebruikt om de database over het netwerk als geheel op te slaan; en tabellen gemaakt voor elke nieuwe site. De structuur hiervan is vergelijkbaar met een installatie op een enkele site zolang u eraan herinnert dat de twee tabellen met gegevens over gebruikers niet voor elke site worden gedupliceerd.