Kompatibilität meines Plugins mit mehreren Standorten

9

Ich möchte, dass mein Plugin in jedem Blog installiert wird und Datenbanktabellen pro Blog erstellt werden. Ich habe diesen Code:

register_activation_hook( __FILE__, 'install1' );
function install1() {
    global $wpdb;

    if (function_exists('is_multisite') && is_multisite()) {
        // check if it is a network activation - if so, run the activation function for each blog id
        if (isset($_GET['networkwide']) && ($_GET['networkwide'] == 1)) {
                    $old_blog = $wpdb->blogid;
            // Get all blog ids
            $blogids = $wpdb->get_col($wpdb->prepare("SELECT blog_id FROM $wpdb->blogs"));
            foreach ($blogids as $blog_id) {
                switch_to_blog($blog_id);
                _install2();
            }
            switch_to_blog($old_blog);
            return;
        }   
    } 
    _install2();        
}

function _install2()
{
    require_once WP_PLUGIN_DIR . '/pluginfolder/functions/database.php';
    require_once WP_PLUGIN_DIR . '/pluginfolder/functions/general.php';
    $db_error = false;

    $sql_file = WP_PLUGIN_DIR . '/pluginfolder/ossq.sql';
    os_db_connect(DB_HOST, DB_USER, DB_PASSWORD);
    os_set_time_limit(0);
    os_db_install(DB_NAME, $sql_file);
    if ($db_error != false) {

        //  echo 'instalation successfull';
    } else {


    }

Der Code ist in diesem Blog-Beitrag inspiriert [http://shibashake.com/wordpress-theme/write-a-plugin-for-wordpress-multi-site]

Die SQL-Datei besteht aus:

DROP TABLE IF EXISTS address_book;
CREATE TABLE address_book (
   address_book_id int NOT NULL auto_increment,
   customers_id int NOT NULL,
   entry_gender char(1),
   entry_company varchar(255),
   entry_firstname varchar(255) NOT NULL,
   entry_lastname varchar(255) NOT NULL,
   entry_street_address varchar(255) NOT NULL,
   entry_suburb varchar(255),
   entry_postcode varchar(255) NOT NULL,
   entry_city varchar(255) NOT NULL,
   entry_state varchar(255),
   entry_country_id int DEFAULT '0' NOT NULL,
   entry_zone_id int DEFAULT '0' NOT NULL,
   PRIMARY KEY (address_book_id),
   KEY idx_address_book_customers_id (customers_id)
);

Es funktioniert jedoch nicht. Das Plugin erstellt Tabellen wie in einem normalen WordPress-Programm, jedoch nicht in jedem Blog in der Multisite-Umgebung.

Bitte helfen Sie!

Ken
quelle
Was ist in der Datei ossq.sql und warum nicht $ wpdb Objekt verwenden
Bainternet
Anstatt für jede Blog-Installation eine neue Tabelle zu erstellen, wäre es nicht sinnvoller, nur eine Tabelle zu verwenden, sondern eine Spalte für blog_id hinzuzufügen? Auf diese Weise ist die Blog-ID immer 1, wenn es nur ein Blog gibt. Wenn mehrere Websites vorhanden sind, wird die Blog-ID gemäß der Site-ID festgelegt ...
Scott
Ich wollte das tun, aber ich weiß nicht, wie ich das machen soll. Ich kann eine Spalte für die Blog-IDs erstellen, aber ich kann keine Funktion dafür erstellen.
Ken
Das funktioniert super, ich habe es kürzlich in meinen Code eingefügt. newzealandgoonline.co.nz/…
NZGO

Antworten:

12

Das Meta-Plugin für die ordnungsgemäße Netzwerkaktivierung wurde genau für solche Fälle geschrieben.

Scribu
quelle
Schönes Plugin. Ich denke du bist der Autor. Ich konnte keine positive Bewertung abgeben, da ich heute 30 Stimmen verwendet habe :(
Giri
Das Plugin löst mein Problem nicht. Die beiden Sites, an denen ich mein Plugin im Netzwerk aktiviert habe, haben noch 1 Datenbanktabelle. Was ich brauche, ist, dass sie jeweils separate Datenbanktabellen haben.
Ken
3
Das heißt, Sie haben ihrem Namen kein $ wpdb-> Präfix hinzugefügt.
Scribu