Der richtige Weg, dies heutzutage zu tun, besteht darin, Ihr Schema als Datei in die Plugin-Quelle aufzunehmen und die eingebaute WordPress-Funktion dbDelta () zu verwenden, um die Datenbank nach Bedarf mithilfe dieses Schemas zu aktualisieren. Der tatsächlich erforderliche Code ist sehr einfach:
$sql = file_get_contents( plugin_dir_path(__FILE__) . "/schema.sql" );
dbDelta( $sql );
Dadurch wird die Datenbank nach Bedarf für Sie erstellt und aktualisiert. Bei der letzten Überprüfung wurden keine alten nicht verwendeten Spalten gelöscht, sodass Sie dies über eine Versionsprüfung codieren müssen. Dies ist eine schöne Funktion von WordPress und eine enorme Zeitersparnis. Beachten Sie beim Erstellen der Datei schema.sql, dass Sie den Abstand in einen MySQL-Schemaexport genau so kopieren, wie der Code dbDelta () angeblich sehr pingelig in Bezug auf den Abstand ist. Sie sollten auch die Version der Datenbank testen. Wenn dies nicht die neueste ist, rufen Sie die oben genannte Version auf, um die Datenbank zu aktualisieren. Möglicherweise müssen Sie auch bestimmte Aktualisierungen vornehmen, um Änderungen abzudecken, die bei dbDelta () nicht richtig sind (z. B. Löschen einer Spalte). Es ist einfach, einen einfachen logischen if-Test zu schreiben, um festzustellen, ob die Version aktualisiert wurde, und diese manuellen Updates über $ wpdb durchzuführen. Beispielsweise können Sie eine Spalte löschen, die jetzt nicht mehr verwendet wird.
$installed_ver = get_option(MY_DB_VERSION);
$wpp = $wpdb->prefix . "mypluginname";
if ($installed_ver < 102)
$wpdb->query("ALTER TABLE ${wpp}_movies DROP nft_date");
if ($installed_ver < 107)
$wpdb->query("ALTER TABLE ${wpp}_movies CHANGE lastupdated "
. "lastupdated TIMESTAMP on update CURRENT_TIMESTAMP "
. "NOT NULL DEFAULT CURRENT_TIMESTAMP");
update_option(MY_DB_VERSION, $db_version);
Dies wird durch das Ausführen von Code vereinfacht. Ich entschuldige mich, wenn ich ihn bei der Vereinfachung für die Veröffentlichung beschädigt habe.
Beachten Sie auch, dass WordPress ab WordPress 3.9.2 beim Aktualisieren des Plugins nicht immer den Aktivierungs-Hook ausführt (insbesondere, wenn ein Massenupdate über die Seite Dashboard-Updates durchgeführt wird).
Kurz gesagt, ja die -
$wpdb
Klasse. Weitere Informationen finden Sie im Codex .Wann immer Sie mit einer benutzerdefinierten Tabelle (oder wirklich einer beliebigen Tabelle) interagieren, sollten Sie diese durchgehen.
$wpdb
Stellen Sie insbesondere sicher, dass Sie mit derprepare
Methode vertraut sind, mit der Abfragen vermieden und Injektionen verhindert werden können.Sie sollten bereits damit vertraut sein, da Sie es zum Erstellen der Tabelle verwenden sollten. An Ihrem Installations-Hook sollten Sie Folgendes haben:
Dieser Code wird tatsächlich ausgeführt, wenn das Plug-In aktiviert ist (dh nicht nur installiert ist). Es wird also ausgeführt, wenn jemand das Plug-In automatisch aktualisiert . Hinweis: Wenn das Upgrade durch manuelles Ersetzen des Plug-Ins erfolgt, wird dies nicht der Fall sein. Daher müssen Sie den obigen Code
admin_init
beim Upgrade Ihres Plug-Ins auslösen (Versionsnummer in der Optionstabelle speichern, mit der aktuellen Version vergleichen). .Jetzt möchten Sie normalerweise nicht, dass der
CREATE TABLE
SQL-Befehl jedes Mal ausgeführt wird, wenn Sie das Plug-In aktualisieren - hierdBDelta()
kommt es ins Spiel .Bevor Sie den obigen Befehl ausführen, wird überprüft, ob die Tabelle vorhanden ist. Außerdem werden die Spaltentypen überprüft. Wenn die Tabelle nicht vorhanden ist, wird sie erstellt, wenn dies der Fall ist. Einige Spaltentypen haben sie jedoch geändert. Wenn eine Spalte nicht vorhanden ist, wird sie hinzugefügt.
Leider - wenn Sie eine Spalte aus dem oben genannten entfernen, wird die Spalte nicht automatisch entfernt. Um Spalten / Tabellen zu entfernen, müssen Sie diese speziell
DROP
festlegen (überprüfen, ob sie vorhanden sind, bevor Sie dies tun).quelle