Hacer que mi complemento sea compatible con múltiples sitios

9

Quiero que mi complemento se instale en cada blog y cree tablas de base de datos por blog. Tengo este codigo:

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 {


    }

El código está inspirado en esta publicación de blog [http://shibashake.com/wordpress-theme/write-a-plugin-for-wordpress-multi-site]

El archivo SQL consta de:

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

Sin embargo, no funciona, el complemento crea tablas como en un wordpress normal pero no en cada blog en el entorno multisitio.

¡Por favor ayuda!

Conocer
fuente
qué hay en el archivo ossq.sql y por qué no usar el objeto $ wpdb
Bainternet
en lugar de crear una nueva tabla para cada instalación de blog, ¿no tendría más sentido usar solo una tabla, pero agregar una columna para blog_id? De esta forma si sólo hay un blog de la ID blog es siempre 1. Si multisitio entonces el ID del blog se establece de acuerdo con el ID de sitio ...
a Scott
Quería hacerlo, pero no sé cómo hacerlo. Puedo hacer una columna para los identificadores de blog, sin embargo, no sé cómo crear una función para eso.
Ken
Esto funciona muy bien, lo he agregado recientemente en mi código. newzealandgoonline.co.nz/…
NZGO

Respuestas:

12

El meta-plugin Proper Network Activation fue escrito precisamente para casos como este.

scribu
fuente
Bonito complemento. Creo que eres el autor. No pude dar mi voto porque usé 30 votos hoy :(
Giri
El complemento no resuelve mi problema. Los dos sitios donde activé mi plugin en red todavía tienen 1 tablas de base de datos. Lo que necesito es que tengan tablas de base de datos separadas cada una.
Ken
3
Eso significa que no agregaste el prefijo $ wpdb-> a su nombre.
scribu