使我的插件多站点兼容


9

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

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上一样创建表,但在多站点环境中的每个博客上都不会。

请帮忙!


ossq.sql文件中的内容以及为什么不使用$ wpdb对象
Bainternet 2011年

与其为每个博客安装都创建一个新表,不如只使用一个表,而是为blog_id添加一列更有意义?这样,如果只有一个博客,则博客ID始终为1。如果是多站点,则博客ID会根据站点ID进行设置...
Scott

我想这样做,但是我不知道该怎么做。我可以为博客ID创建一列,但是我不为它创建函数。

效果很好,我最近在代码中添加了它。newzealandgoonline.co.nz/…–
NZGO

Answers:


12

适当的网络激活元插件是正是因为这样的情况下写的。


不错的插件。我认为你是作者。我不能放弃cos,我今天用了30票:(
Giri

插件无法解决我的问题。我通过网络激活插件的两个站点仍然具有1个数据库表。我需要的是它们每个都有独立的数据库表。
肯(Ken)

3
这意味着您没有在其名称中添加$ wpdb-> prefix。
scribu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.