使我的插件与多站点兼容

时间:2011-08-09 作者:Ken

我希望我的插件安装在每个博客上,并为每个博客创建数据库表。我有以下代码:

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 {


    }
这段代码的灵感来自于这篇博客文章[http://shibashake.com/wordpress-theme/write-a-plugin-for-wordpress-multi-site]

SQL文件包括:

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)
);
然而,它不起作用,插件确实像在常规wordpress上一样创建表,但不是在多站点环境中的每个博客上创建表。

请帮忙!

1 个回复
最合适的回答,由SO网友:scribu 整理而成

这个Proper Network Activation 元插件正是为这样的情况编写的。

结束

相关推荐

在WP 3.2升级后需要帮助修复SQL语法错误

我使用的插件在升级到wp3后失败。2.错误日志显示:WordPress数据库错误您的SQL语法有错误;检查与MySQL服务器版本相对应的手册,以获取在第1行的“”附近使用的正确语法query SELECT post_id, meta_value, post_status FROM bxxoai_postmeta LEFT JOIN bxxoai_posts ON post_id=bxxoai_posts.ID WHERE post_status=\'publish\' AND meta_key=\'wpf