Tornando meu plug-in compatível com vários sites

9

Quero que meu plug-in seja instalado em cada blog e crie tabelas de banco de dados por blog. Eu tenho este código:

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 {


    }

O código é inspirado nesta postagem do blog [http://shibashake.com/wordpress-theme/write-a-plugin-for-wordpress-multi-site]

O arquivo SQL consiste em:

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

No entanto, não está funcionando, o plugin cria tabelas como em um wordpress normal, mas não em cada blog no ambiente multisite.

Por favor ajude!

Ken
fonte
o que está em arquivo ossq.sql e por que não usar $ object wpdb
Bainternet
em vez de criar uma nova tabela para cada instalação de blog, não faria mais sentido usar apenas uma tabela, mas adicionar uma coluna para blog_id? Dessa forma, se houver apenas um blog ID blog é sempre 1. Se multisite então o ID do blog é definido de acordo com o ID do site ...
Scott
Eu queria fazer isso, mas não sei como fazer isso. Eu posso fazer uma coluna para os IDs do blog, no entanto, não sei como criar uma função para isso.
Ken
Isso funciona muito bem, eu adicionei recentemente no meu código. newzealandgoonline.co.nz/…
NZGO

Respostas:

12

O meta-plugin de Ativação de Rede Correta foi escrito precisamente para casos como este.

scribu
fonte
Bom plugin. Eu acho que você é o autor. Eu não poderia dar upvote cos i usado 30 votos hoje :(
Giri
O plugin não resolve o meu problema. Os dois sites em que eu ativei meu plug-in de rede ainda possuem 1 tabela de banco de dados. O que eu preciso é que eles tenham tabelas de banco de dados separadas cada uma.
Ken
3
Isso significa que você não adicionou o prefixo $ wpdb-> ao nome deles.
scribu