Rendere compatibile il mio plug-in multi-sito


9

Voglio che il mio plugin sia installato su ogni blog e crei tabelle di database per blog. Ho questo codice:

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 {


    }

Il codice è ispirato a questo post del blog [http://shibashake.com/wordpress-theme/write-a-plugin-for-wordpress-multi-site]

Il file SQL è costituito da:

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)
);

Tuttavia, non funziona, il plug-in crea tabelle proprio come in un normale wordpress ma non su ogni blog nell'ambiente multisito.

Per favore aiuto!


cosa c'è nel file ossq.sql e perché non usare l'oggetto $ wpdb
— Bainternet

invece di creare una nuova tabella per ogni installazione di blog non avrebbe più senso usare solo una tabella ma aggiungere una colonna per blog_id? In questo modo, se esiste un solo blog, l'ID del blog è sempre 1. Se multisito, l'ID del blog è impostato in base all'ID del sito ...
— Scott

Volevo farlo, ma non so come farlo. Posso creare una colonna per gli ID del blog, ma non so come crearne una.
— Ken,

Funziona benissimo, l'ho recentemente aggiunto nel mio codice. newzealandgoonline.co.nz/…
— NZGO

Risposte:


12

Il meta-plug-in Attivazione di rete corretta è stato scritto proprio per casi come questo.


Bel plugin. Penso che tu sia l'autore. Non ho potuto dare voti perché ho usato 30 voti oggi :(
— Giri

Il plugin non risolve il mio problema. I due siti in cui ho attivato la rete il mio plugin hanno ancora 1 tabelle di database. Ciò di cui ho bisogno è che abbiano tabelle di database separate ciascuna.
— Ken,

3
Ciò significa che non hai aggiunto $ wpdb-> prefisso al loro nome.
— scribu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.