In Teil 1 dieser Serie habe ich gezeigt, wie man WordPress lokal installiert und wie man eine WordPress-Datenbank in Vertabelo importiert. In diesem Artikel sehen wir uns die Tabellen in der WordPress-Datenbank genauer an.
Ein kurzer Blick auf das WordPress-Datenbankmodell und das Dashboard
Im vorherigen Teil habe ich die WordPress-Datenbank in unser Online-Datenbankmodellierungstool importiert. Für den Datensatz ist die Struktur der Datenbank wie folgt:
Es gibt ein paar wichtige Fakten über das WordPress-Datenbankmodell, die Sie verstehen sollten, bevor wir beginnen:
- Jede WordPress-Site verwendet genau dieselbe Datenbankstruktur. Es enthält 11 Tabellen und jede WordPress-Site verwendet sie im Hintergrund. Die meisten WordPress-Plugins verwenden die Datenbank auch ohne Änderungen am Datenbankmodell. Das Modell muss flexibel genug sein, um all die verschiedenen Plugins aufzunehmen. Natürlich können Plugin-Ersteller benutzerdefinierte Tabellen für bestimmte Plugins hinzufügen, wenn sich die Datenstruktur erheblich unterscheidet oder wenn ihr Plugin große Datenmengen speichert.
- Der WordPress-Datenbank fehlen Fremdschlüsselbeschränkungen . Dies liegt daran, dass WordPress die MyISAM-Speicher-Engine verwendet, die keine Fremdschlüssel unterstützt. Tabellen umgehen dies, indem sie Attribute haben, die unverbundene „Fremdschlüssel“-ähnliche Werte speichern, sodass die Fremdschlüsseleinschränkung nicht von der Datenbank überprüft wird. Zum Beispiel
post_author
-Attribut imwp_posts
table ist ein „Verweis“ auf das „ID“-Attribut inwp_users
Tabelle. - Die meisten Tabellen verwenden einen einspaltigen Primärschlüssel. Sie heißen entweder einfach „ID“ (in der Datei
wp_users
und diewp_posts
Tabelle) odermeta_id
/umeta_id
(in den Metatabellen:wp_postmeta
,wp_commentmeta
undwp_usermeta
) oder eine Kombination aus dem Tabellennamen und dem Suffix „_id“ (alle anderen Tabellen). Die einzige Ausnahme von diesen Regeln istwp_term_relationships
Tabelle, wobei der Primärschlüssel aus den beiden Attributen besteht:object_id
undterm_taxonomy_id
. Attribute, die Primärschlüssel oder Teil eines Primärschlüssels sind, sind vom Typ bigint(20). Bei Primärschlüsseln mit nur einem Attribut ist die Eigenschaft „Auto-Increment“ ebenfalls auf „Yes“ gesetzt.
Beiträge und Seiten
Der Hauptgrund für die Verwendung von WordPress besteht darin, Inhalte zu erstellen, zu manipulieren und der Öffentlichkeit zu präsentieren. Zu diesem Zweck stellt uns WordPress zwei Inhaltstypen zur Verfügung:Seiten und Beiträge .
Seiten werden verwendet, um statische Inhalte anzuzeigen . Sie verwenden keine Tags oder Kategorien und sind nicht nach Datum aufgelistet. Außerdem erlauben sie keine Kommentare oder das Teilen in sozialen Medien. Seiten können Unterseiten haben. Über uns Seiten sind gute Beispiele für diesen Typ.
Andererseits Beiträge sind nach Datum aufgelistet und können mithilfe von Kategorien organisiert werden und Tags . Beiträge können dank ihrer chronologischen Reihenfolge in RSS-Feeds verwendet werden. Beiträge können keine „Subposts“ haben, aber Kommentare und Social Media Shares sind möglich. Posts sind im Wesentlichen Blog-Posts. Dies ist verständlich, da sich WordPress aus einer Blogging-Plattform entwickelt hat.
Die primäre Tabelle hinter Inhalten auf jeder WordPress-Seite heißt wp_posts
:
WordPress verwendet den wp_posts
Tabelle zum Speichern von Seiten, Beiträgen und Anhängen. Wir können diese Tabelle als den Kern unserer Seite betrachten, den Ort, an dem die meisten Inhalte gespeichert sind. Es ist wichtig darauf hinzuweisen, dass Anhänge tatsächlich auf der Festplatte und der Datensatz in wp_posts
Die Tabelle enthält weitere Informationen darüber (wer hat sie wann hochgeladen usw.).
Die Felder in wp_posts
Tabelle sind:
post_author
– ein Verweis aufwp_users
Tabelle, die den Autor des Beitrags angibt.post_date
– Datum und Uhrzeit, wann der Datensatz in die Tabelle eingefügt wurde.post_date_gmt
– das GMT/UTC-Datum und die Zeit, zu der ein Datensatz in die Tabelle eingefügt wurde.post_content
– der eigentliche Inhalt des Beitrags.post_title
– der Titel des Beitrags.post_excerpt
– eine Zusammenfassung des Inhalts.post_status
– der aktuelle Beitragsstatus. WordPress verwendet 8 Standardstatus:„Veröffentlichen“, „Zukünftig“, „Entwurf“, „Ausstehend“, „Privat“, „Papierkorb“, „Auto-Entwurf“ und „Übernehmen“.comment_status
– Schaltet Kommentare für einen einzelnen Beitrag oder für eine ganze Seite ein und aus. Es gibt zwei mögliche Werte:„offen“ und „geschlossen“.ping_status
– identifiziert, ob ein Beitrag Pingbacks und Trackbacks zulässt. Wiecomment_status
, darf es nur die Werte „offen“ und „geschlossen“ enthalten.post_password
– das zum Anzeigen des Beitrags verwendete Passwort (optional).post_name
– die für Menschen lesbare URL einespost_title
.to_ping
– eine Liste von URLs, an die WordPress Pingbacks senden soll, getrennt durch „\n“.pinged
– eine Liste von URLs, an die WordPress Pingbacks gesendet hat, getrennt durch „\n“.post_modified
– Datum und Uhrzeit der letzten Änderung eines Beitrags.post_modified_gmt
– das GMT/UTC-Datum fürpost_modified
.post_content_filtered
– Wird von Plugins verwendet, um teure Post-Content-Transformationen zwischenzuspeichern.post_parent
– verweist auf den übergeordneten Beitrag.guid
– Global Unique Identifier für einen Beitrag; seine permanente URL.menu_order
– Wird für die Bestellung von Inhalten verwendet.post_type
– die Art der Aufzeichnung. Er kann die Werte „post“, „page“, „attachment“ oder benutzerdefinierte benutzerdefinierte Typen enthalten.post_mime_type
– der Typ der hochgeladenen Dateien, der nur für Beiträge mitpost_type = attachment
definiert ist . Es kann Werte wie „image“, „application/pdf“ und „application/msword“ enthalten.comment_count
– die Anzahl der Kommentare, Pingbacks und Trackbacks des Beitrags.
Hier ist eine Momentaufnahme der wp_posts
Tabelle, nachdem ich die Seite „Über Nikola Tesla“ hinzugefügt habe:
Wenn wir uns die wp_posts
Tabelle können wir einige Versionen unserer Seite sehen. Der Datensatz mit der ID = 1
hat post_status = publish
, was bedeutet, dass der Beitrag für alle sichtbar ist. Der comment_status = closed
und ping_status = closed
gibt an, dass Kommentare und Pings für diesen Beitrag deaktiviert sind.
Alle zusätzlichen Informationen zu Beiträgen und Seiten werden im wp_postmeta
Tabelle:
Die Spalten in dieser Tabelle lauten wie folgt:
meta_id
– der Primärschlüssel der Tabelle.post_id
– ein Verweis aufwp_posts
Tabelle.meta_key
– eine Beschreibung einesmeta_value
Attribut.meta_value
– der aktuell gespeicherte Wert.
Die wp_postmeta
Tabelle enthält alle Informationen, die nicht in wp_posts
Tabelle gespeichert. Es wird als Schlüssel-Wert-Paare gespeichert, eine Technik, die oft als Entität-Attribut-Wert bezeichnet wird (EAV). Die Tabelle kann von Plugins für benutzerdefinierte Anforderungen verwendet werden.
WordPress-Taxonomien
Taxonomie ist ein schickes Wort, das sich im Grunde auf das Gruppieren von Dingen bezieht. WordPress hat ein paar eingebaute Taxonomien zum Gruppieren von Beiträgen. Zum Beispiel Kategorien und Tags sind eingebaute WordPress-Taxonomien. Sie können WordPress auch Ihre eigenen benutzerdefinierten Taxonomien hinzufügen.
Die Taxonomien und ihre Begriffe werden in Tabellen namens wp_terms
, wp_term_taxonomy
und wp_term_relationships
.
Die wp_terms
Tabelle speichert eine Liste von Begriffen, die zum Klassifizieren von Objekten auf Ihrer WordPress-Site verwendet werden:
Diese Tabelle enthält alle Tag- und Kategorienamen sowie Begriffe aus unseren benutzerdefinierten Taxonomien. Die Attribute lauten wie folgt:
term_id
– der Primärschlüssel der Tabelle.name
– der Name des Begriffs.slug
– die URL vonname
.term_group
– verwendet, um Begriffe zusammenzufassen.
Hier sind die Inhalte der wp_terms
Tabelle:
Die Zuordnung der Begriffe zu Taxonomien erfolgt mit Hilfe des wp_term_taxonomy
Tabelle:
Die Attribute in der Tabelle sind:
term_taxonomy_id
– der Primärschlüssel der Tabelle.term_id
– der Verweis auf diewp_terms
Tabelle.taxonomy
– der Name der Taxonomie.description
– eine Beschreibung eines Begriffs in dieser bestimmten Taxonomie.parent
– ein Verweis auf den übergeordneten Begriff in denwp_terms
Tabelle.count
– die Anzahl der Objekte inwp_posts
Tabelle, die diesen Begriff in dieser Taxonomie verwenden.
Die wp_term_taxonomy
Tabelle ermöglicht es uns, denselben Begriff in verschiedenen Taxonomien wiederzuverwenden. Beachten Sie, dass der Datensatz term_id = 1
ist hat taxonomy = category
, während die anderen Datensätze taxonomy = post_tag
haben .
Um Objekte zu verknüpfen, die in wp_posts
und die wp_term_taxonomy
Tabellen verwendet WordPress den wp_term_relationships
Tabelle:
Beachten Sie, dass dies die einzige Tabelle im Modell ist, die einen Schlüssel hat, der aus mehr als einem Attribut besteht.
Die wp_term_relationships
Tabelle hat die folgenden Attribute:
object_id
– ein Verweis aufwp_posts
Tabelle.term_taxonomy_id
– ein Verweis auf diewp_term_taxonomy
Tabelle.term_order
– die Begriffsreihenfolge für ein bestimmtes Objekt.
Wir haben hier sechs Datensätze, die sechs Datensätze aus der wp_term_taxonomy
Tabelle mit dem Beitrag (object_id = 6
).
Kommentare und WordPress-Datenmodellierung
Wir haben es geschafft, einige Inhalte auf unserer WordPress-Seite zu platzieren. Das ist schön, aber in den meisten Fällen möchten wir Feedback aus der Öffentlichkeit erhalten. Und das ist die Rolle der Kommentarfunktion.
Um Kommentare zu Beiträgen anzuzeigen, können wir einfach „Kommentar hinterlassen“ verwenden oder auf „X Kommentar“ klicken (wobei X für die Anzahl der Kommentare zum Beitrag steht).
Unser erster Beitrag hat bereits einen Kommentar. Wenn wir darauf klicken, sehen wir, dass es sich um einen automatischen Kommentar handelt, der durch Pingback verursacht wird. Wir fügen diesem Post einen weiteren Kommentar hinzu:
Wir sehen jetzt zwei Kommentare zu unserem Beitrag, aber was steckt dahinter in der Datenbank?
Sie können anhand des Tabellennamens erraten, dass die Datei wp_comments
Tabelle wird verwendet, um Kommentare auf unserer WordPress-Seite zu speichern:
Die Attribute sind größtenteils selbsterklärend, aber wir werden uns trotzdem einige genauer ansehen.
Die comment_post_ID
ist ein Verweis auf wp_posts
Tisch; es zeigt an, welcher Beitrag Kommentare erhalten hat. Für den ersten Kommentar können wir sehen, dass es sich tatsächlich um einen Pingback handelte und dass der „Autor“ ein anderer Beitrag ist. Für den zweiten Kommentar können wir sehen, dass ich der Autor bin. Beachten Sie auch den comment_agent
enthält einige grundlegende Informationen über das System und den Computer, die zum Posten eines Kommentars verwendet werden.
Die Hauptidee hinter allen drei Metatabellen im Modell besteht darin, Daten zu speichern, die wir nicht in unserer Primärtabelle speichern möchten. Die wp_commentmeta
bezieht sich auf wp_comments
Tabelle auf die gleiche Weise wie die wp_postmeta
Tabelle bezieht sich auf die wp_posts
Tabelle.
WordPress-Benutzer sehen
Nachdem unsere Seite online ist, kann sie jeder sehen. WordPress-Benutzer sind diejenigen, die gemäß ihrem Berechtigungsstatus Änderungen an unserer Website und ihren Inhalten vornehmen können.
Jetzt schauen wir uns die wp_users
und die wp_usermeta
Tabellen in der MySQL-Datenbank.
Wie erwartet, die wp_users
Die oben gezeigte Tabelle speichert grundlegende Daten für alle Benutzer, die auf unserer WordPress-Seite registriert sind. Beachten Sie, dass der user_pass
verschlüsselt ist und dass NewUser den user_activation_key
hat Attribut gefüllt, während edrkusic dieses Feld leer hat.
While-Attribute, die in wp_users
Tabelle sind das, was wir auf jeder WordPress-Seite erwarten würden, die wp_usermeta
Tabelle wird verwendet, um Werte zu speichern, die für ein bestimmtes Projekt spezifisch sein könnten:
Beachten Sie beispielsweise, dass der Datensatz mit umeta_id = 25
enthält den Wert "einige biografische Informationen" , derselbe Text, den wir beim Bearbeiten von NewUser in das Dashboard eingegeben haben. Die user_id
Attribut in diesem Datensatz hat Wert 2 , was der NewUser-ID in wp_users
Tisch. Offensichtlich die user_id
ist ein Verweis auf wp_users
Tabelle.
Links und Optionen in WordPress
Die Idee hinter den wp_links
Tabelle soll Links zu anderen Seiten speichern:
Links zu anderen Seiten zu haben, war zu Beginn der Blogging-Ära sehr beliebt; heutzutage wird es immer weniger verwendet. Ab der WordPress-Version 3.5 wurde die Linkverwaltung sogar aus der Admin-Oberfläche entfernt. Dennoch wird diese Tabelle beibehalten, um die Kompatibilität mit älteren Versionen zu gewährleisten.
Die wp_options
Tabelle speichert Daten über WordPress-Installation, Seitenkonfiguration, Design, Plugins und Widgets:
Es wird auch verwendet, um temporäre zwischengespeicherte Daten zu speichern. Die EAV-Logik ist auch in dieser Tabelle vorhanden, ebenso wie in wp_usermeta
, wp_postmeta
und wp_commentmeta
. Das Attribut option_name
spielt die Rolle des Schlüssels, während das Attribut option_value
ist der entsprechende Wert. Die anderen beiden Attribute in der Tabelle sind das Primärschlüsselattribut option_id
und autoload
, die steuert, ob eine Option automatisch aus der Datenbank geladen wird.
Evaluieren des Datenbankmodells von WordPress
Das Datenbankmodell hinter WordPress folgt nicht mehreren guten Regeln und Konventionen für das Datenbankdesign. Wenn wir eine Datenbank für einen bestimmten Zweck entwerfen und alle gewünschten Funktionalitäten im Voraus kennen, können wir all diese Regeln befolgen. Aber WordPress muss alles abdecken, was irgendjemand im Sinn haben könnte, also ist das Opfern von Fremdschlüsseln und die Verwendung von EAV etwas, das getan werden muss. Ich würde das ID-Attribut in allen Tabellen gleich benennen und dasselbe mit den „Fremdschlüsseln“ tun. Zum Beispiel würde ich post_author
nicht verwenden in den wp_posts
Tabelle, aber ich würde bei users_id
bleiben . Abgesehen davon muss ich zustimmen, dass die WordPress-Datenbank wirklich ein großartiges Modell für ihren Zweck ist.
Was denkst du? Lassen Sie es uns im Kommentarbereich wissen.