it-swarm.com.de

Gemeinsame Tabelle im Netzwerk

Ich erstelle gerade ein Plugin, das eine XML-Datei liest und die Daten in 4 Tabellen auf einer WordPress-Multisite importiert. Die Tabellen sind ziemlich groß, mit VIELEN Spalten, sodass die Post-Tabelle für diese Aufgabe nicht geeignet ist. Jedes "Blog" im Netzwerk muss in der Lage sein, auf die Daten aus dieser Tabelle zuzugreifen.

Ich habe versucht, die Tabellen zu erstellen, indem ich die Codex-Anweisungen hier mit der Funktion dbDelta befolgt habe: https://codex.wordpress.org/Creating_Tables_with_Plugins

auf einer Multisite-Website werden jedoch eine Reihe von Tabellen für jedes "Blog" im Netzwerk erstellt. Dies ist redundant, da die Daten in allen verschiedenen Tabellensätzen identisch wären.

Ich habe herumgegoogelt, aber ich kann nicht wirklich einen WordPress-Weg finden, dies zu tun.

Hat jemand Ideen, wie dies am besten erreicht wird? Wenn das Plugin netzwerkweit aktiviert ist, muss es eine einzelne Gruppe von Tabellen erstellen, auf die von allen Blogs im Netzwerk zugegriffen werden kann

4
Malibur

Verwenden Sie $wpdb->base_prefix . 'table_name' als Tabellennamen, wenn Sie eine Tabelle für das gesamte Netzwerk erstellen oder Abfragen ausführen möchten.

$wpdb->base_prefix ist immer das Präfix für die Haupttabelle des aktuellen Netzwerks.

4
fuxia

Sie sollten eine Tabelle nur bei Aktivierung erstellen, wenn sie nicht erstellt wurde und in der Datenbank vorhanden ist. Ein kleines Quellcode-Beispiel soll Ihnen helfen.

Die folgenden Quellen erstellen eine Tabelle, auch an einzelnen Standorten. Möglicherweise wird das Plugin im Einzelmodus für jede Seite im Netzwerk aktiviert.

register_activation_hook( __FILE__, 'on_activate' );
function on_activate() {

    create_table();
}

function create_table() {
    global $wpdb;

    $table_name = $wpdb->prefix . 'your_table_name';

    // Check, if exists
    if ( $wpdb->get_var( "show tables like '{$table_name}'" ) == $table_name ) {
        return NULL;
    }

    $sql = "CREATE TABLE " . $table_name . " (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        col VARCHAR(100) NOT NULL,
        PRIMARY KEY  (id)
    );";

    // // make dbDelta() available
    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );
}

Wenn Ihr Plugin nur für die Netzwerkaktivierung vorgesehen ist, fügen Sie einen Kommentar zum Hauptblog des Plugins Network: TRUE hinzu. WP prüft dies und erlaubt die Aktivierung nur netzwerkweit. Fügen Sie in der Quelle auch eine Prüfung für Multisite hinzu, z. B. if (function_exists('is_multisite') && is_multisite()).

Aber jetzt ist der wichtige Teil der Wert für den globalen $wpdb. Verwenden Sie zum Erstellen einer Tabelle im globalen Namespace, nicht für eine bestimmte Site, $wpdb->base_prefix, NOT $wpdb->prefix.

2
bueltge