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 der prepare
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:
$charset_collate = '';
if ( ! empty($wpdb->charset) )
$charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
if ( ! empty($wpdb->collate) )
$charset_collate .= " COLLATE $wpdb->collate";
//Create custom table
$sql_custom_table ="CREATE TABLE {$wpdb->prefix}my_table (
id bigint(20) unsigned NOT NULL auto_increment,
column_a varchar(255) default NULL,
column_b varchar(255) default NULL,
PRIMARY KEY (id)
) $charset_collate; ";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql_custom_table);
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 - hier dBDelta()
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).