Rendre mon plugin multi-site compatible

9

Je veux que mon plugin soit installé sur chaque blog et crée des tables de base de données par blog. J'ai ce 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 {


    }

Le code est inspiré de cet article de blog [http://shibashake.com/wordpress-theme/write-a-plugin-for-wordpress-multi-site]

Le fichier SQL comprend:

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

Cependant, cela ne fonctionne pas, le plugin crée des tableaux comme sur une wordpress régulière mais pas sur chaque blog de l'environnement multisite.

Aidez-moi!

Ken
la source
ce qui est dans le fichier ossq.sql et pourquoi ne pas utiliser l'objet $ wpdb
Bainternet
au lieu de créer un nouveau tableau pour chaque installation de blog, ne serait-il pas plus judicieux d'utiliser un seul tableau mais d'ajouter une colonne pour blog_id? De cette façon, s'il n'y a qu'un seul blog, l'ID du blog est toujours 1. Si multisite, l'ID du blog est défini selon l'ID du site ...
Scott
Je voulais le faire, mais je ne sais pas comment faire. Je peux faire une colonne pour les identifiants du blog mais je ne sais pas comment créer une fonction pour cela.
Ken
Cela fonctionne très bien, je l'ai récemment ajouté dans mon code. newzealandgoonline.co.nz/…
NZGO

Réponses:

12

Le méta-plugin d' activation de réseau approprié a été écrit précisément pour des cas comme celui-ci.

scribu
la source
Joli plugin. Je pense que vous en êtes l'auteur. Je ne pouvais pas abandonner car j'ai utilisé 30 votes aujourd'hui :(
Giri
Le plugin ne résout pas mon problème. Les deux sites sur lesquels j'ai mis en réseau mon plugin ont toujours 1 tables de base de données. Ce dont j'ai besoin, c'est qu'ils aient chacun des tables de base de données distinctes.
Ken
3
Cela signifie que vous n'avez pas ajouté le préfixe $ wpdb-> à leur nom.
scribu