Benutzerdefinierte Datenbanktabellen in WordPress: Teil Eins
Veröffentlicht: 2022-06-27In dieser Artikelserie werden wir uns ansehen, wie wir benutzerdefinierte Datenbanktabellen in WordPress mit oder ohne Plugin erstellen können.
Wann und warum sollte ich benutzerdefinierte Datenbanktabellen verwenden?
In den meisten Fällen sind die standardmäßigen WordPress-Datenbanktabellen, die bei der Installation von WordPress erstellt werden, alles, was Sie jemals brauchen werden. Diese Tabellen enthalten alle möglichen Informationen wie die Art der Beiträge und die zugehörigen Metadaten. Warum brauchen Sie also eine benutzerdefinierte Datenbanktabelle?
Diese kommen zur Geltung, wenn Sie mit Daten arbeiten, die außerhalb der normalen Informationen liegen, die in WordPress verwendet werden. Daher möchten Sie möglicherweise Daten in einer benutzerdefinierten Tabelle platzieren, wenn Sie ein Plugin erstellen, das Informationen in einer Datenbank speichern muss. Aus diesem Grund werden Sie sehen, dass Plugins wie WooCommerce ihre eigenen benutzerdefinierten Tabellen haben.
Abgesehen davon, dass es eine übersichtlichere Methode zum Speichern von Informationen ist, kann die Verwendung separater Tabellen dazu beitragen, die Leistung zu steigern, da alle verwendeten Abfragen nicht Zeilen und Zeilen unnötiger Daten durchsuchen müssen. Stattdessen können sie zum „richtigen“ Tisch geleitet werden, wo sie die benötigten Informationen schneller und effizienter finden können. Dies wird sehr wichtig, wenn Datenbanktabellen zu wachsen beginnen.
Erstellen einer benutzerdefinierten WordPress-Datenbanktabelle
Nehmen wir an, wir möchten ein einfaches Plugin erstellen, das uns hilft, eine Liste von Schülern zu organisieren. In Wirklichkeit bedeutet eine einfache Aufgabe wie diese, dass wir überhaupt keine benutzerdefinierten Tabellen verwenden müssen. Ein benutzerdefinierter Beitragstyp würde die Arbeit perfekt erledigen.
Für dieses Beispiel ist diese Art von Daten jedoch perfekt, um die Theorie hinter benutzerdefinierten Tabellen zu demonstrieren, also werden wir damit weitermachen. Hinweis: Wir gehen davon aus, dass Sie über grundlegende PHP- und MySQL-Kenntnisse verfügen.
Einstieg
Zunächst erstellen wir eine „Student“-Datenbanktabelle mit Spalten für Name, Alter, E-Mail und eine eindeutige ID. Wir werden dies tun, indem wir ein benutzerdefiniertes Plugin erstellen, um die Arbeit zu erledigen.
HINWEIS: Wenn Sie noch nicht damit vertraut sind, wie Sie ein benutzerdefiniertes Plugin erstellen können, lesen Sie unseren Leitfaden zum Erstellen Ihres eigenen benutzerdefinierten WordPress-Plugins, bevor Sie mit diesem Tutorial fortfahren!
Erstellen Sie die Plugin-Dateien
Wir erstellen einen Ordner namens „my-custom-db-tables“ im Plugins-Ordner und darin eine Datei namens „my-custom-db-tables.php“, die diesen Code enthält:
<?php /* Plugin Name: My Custom DB Tables Description: A plugin for registering my students Author: Tassos Antoniou */ function create_the_custom_table() { // THE CODE } register_activation_hook(__FILE__, 'create_the_custom_table');
Wir haben die Plugin-Informationen eingeführt, damit WordPress das Plugin erkennt. Natürlich benötigen Sie auch eine Funktion, die das Tabellenschema zur Datenbank hinzufügt, die die Funktion create_the_custom_table()
sein wird.
In den meisten Fällen müssen Sie diese Funktion nur einmal ausführen, idealerweise wenn das Plugin aktiviert ist. Daher haben wir das von WordPress bereitgestellte register_activation_hook() verwendet, um sicherzustellen, dass die Funktion bei der Aktivierung des Plugins ausgeführt wird.
Tabellenstruktur definieren
Natürlich passiert noch nichts, wenn wir das Plugin aktivieren, da die Funktion noch leer ist. Also lass uns gehen und es mit diesem Code ausfüllen, um die Tabelle tatsächlich zu erstellen:
<?php /* Plugin Name: My Custom DB Tables Description: A plugin for registering my students Author: Tassos Antoniou */ function create_the_custom_table() { global $wpdb; $charset_collate = $wpdb->get_charset_collate(); $table_name = $wpdb->prefix . 'students'; $sql = "CREATE TABLE " . $table_name . " ( id int(11) NOT NULL AUTO_INCREMENT, name tinytext NOT NULL, email VARCHAR(100) NOT NULL, age int(11) NULL, PRIMARY KEY (id) ) $charset_collate;"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } register_activation_hook(__FILE__, 'create_the_custom_table');
Lassen Sie uns jetzt einen Moment innehalten, um zu untersuchen, was wir mit diesem Codestück gemacht haben.
Zunächst holen wir uns das Tabellenpräfix mithilfe der globalen $wpdb
WordPress-Klasse, die mit der Datenbank kommuniziert. Es ist dasselbe Präfix, das in der Datei wp-config.php
definiert ist, und es empfiehlt sich, es auch in Ihrer benutzerdefinierten Tabelle zu verwenden. Wir erben auch die aktuelle Sortierung, indem wir sie in der Variablen $charset_collate
, um sie später in der Abfrage festzulegen.
Unser nächster Schritt besteht darin, die Struktur der Tabelle in der SQL-Abfrage zu definieren, um das gewünschte Schema richtig zu machen. Wie gesagt, eine ID-, E-Mail-, Name- und Altersspalte mit den jeweils richtigen Datentypen.
$sql = "CREATE TABLE " . $table_name . " ( id int(11) NOT NULL AUTO_INCREMENT, name tinytext NOT NULL, email VARCHAR(100) NOT NULL, age int(11) NULL, PRIMARY KEY (id) ) $charset_collate;";
Als nächstes upgrade.php
require_once
Das ist zwingend erforderlich, um die direkt danach dbDelta
Funktion nutzen zu können. In WordPress müssen wir die dbDelta-Funktion verwenden, um eine Datenbanktabelle zu erstellen (oder die vorhandenen Tabellen auf eine neue Struktur zu aktualisieren).
HINWEIS: Anstatt direkt eine SQL-Abfrage auszuführen, wird diese Funktion verwendet, um die Datenbank zu ändern, indem eine Tabelle basierend auf angegebenen SQL-Anweisungen erstellt oder aktualisiert wird. Mit dem $queries
Parameter können wir das Schema unserer benutzerdefinierten Tabelle übergeben.
Wenn Sie jetzt das Plugin aktivieren und Ihre Datenbank überprüfen, sollten Sie sehen, dass die Tabelle erstellt wurde.
Wenn Sie nun die Datei wp-admin/includes/upgrade.php
, werden Sie feststellen, dass dbDelta()
preg_match()
, um Informationen aus der SQL-Anweisung abzurufen. Aus diesem Grund müssen Sie beim Bearbeiten vorsichtig sein. Die offizielle Dokumentation enthält weitere Informationen dazu, aber wir haben die wichtigsten Punkte unten hervorgehoben:
- Sie müssen jedes Feld in Ihrer SQL-Anweisung in eine eigene Zeile stellen.
- Zwischen den Wörtern PRIMARY KEY und der Definition Ihres Primärschlüssels müssen zwei Leerzeichen stehen.
- Sie müssen das Schlüsselwort KEY anstelle des Synonyms INDEX verwenden und mindestens einen KEY einschließen.
- Auf KEY muss ein einzelnes Leerzeichen folgen, dann der Schlüsselname, dann ein Leerzeichen, dann eine offene Klammer mit dem Feldnamen, dann eine geschlossene Klammer.
- Anderen KEYs als primären sollte ein Name gegeben werden. Zum Beispiel:
... PRIMARY KEY (id), KEY age (age) ...
- Sie dürfen keine Apostrophe oder Backticks um Feldnamen herum verwenden.
- Feldtypen müssen alle Kleinbuchstaben sein.
- SQL-Schlüsselwörter wie CREATE TABLE und UPDATE müssen in Großbuchstaben geschrieben werden.
- Sie müssen die Länge aller Felder angeben , die einen Längenparameter akzeptieren, wie zum Beispiel int(11) der ID-Spalte.
Vielleicht ist Ihnen auch aufgefallen, dass wir nicht geprüft haben, ob die Tabelle bereits in der Datenbank existiert. Das liegt daran, dass dbDelta
das für uns erledigt. Sie müssen sich keine Gedanken über Aktualisierungsabfragen machen. Es erstellt nicht nur die Tabelle, sondern prüft auch, ob bereits eine Tabelle mit demselben Namen existiert, und falls ja, wird die Tabelle nicht erstellt. Die vorhandene Tabellenstruktur wird nur bei Bedarf aktualisiert.
Wir werden dies in zukünftigen Artikeln der Serie ausführlicher behandeln.
Funktionalität und Skalierbarkeit
Was soll also passieren, wenn das Plugin deaktiviert oder deinstalliert wird? Idealerweise sollte es eine Admin-Option geben, um zu wählen, ob diese Tabelle aus der Datenbank gelöscht werden soll oder nicht, wenn und wenn das Plugin deaktiviert oder gelöscht wird.
Außerdem werden Sie mit ziemlicher Sicherheit früher oder später feststellen, dass Sie Ihr Plugin ändern müssen (um es zu verbessern oder einen Fehler auszubügeln). Vielleicht möchten Sie die Art und Weise ändern, wie die Daten gespeichert werden, der Tabelle Spalten hinzufügen oder ihr Design ändern. Das bedeutet, dass Sie das Plugin so erstellen sollten, dass es so skalierbar wie möglich ist und sich an alle vorgenommenen Änderungen anpassen kann.
In unseren nächsten Artikeln dieser Serie werden wir uns mit diesen Themen befassen und Ihnen zeigen, wie Sie dies erreichen können. Schau bald wieder vorbei!