Làm cho plugin của tôi tương thích nhiều trang web


9

Tôi muốn plugin của tôi được cài đặt trên mỗi blog và tạo các bảng cơ sở dữ liệu cho mỗi blog. Tôi có mã này:

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 {


    }

Mã được lấy cảm hứng từ bài đăng trên blog này [http://shibashake.com/wordpress-theme/write-a-plugin-for-wordpress-multi-site]

Tệp SQL bao gồm:

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

Tuy nhiên, nó không hoạt động, plugin tạo các bảng giống như trên một wordpress thông thường nhưng không phải trên mỗi blog trên môi trường nhiều trang.

Xin vui lòng giúp đỡ!


whats trong tệp ossq.sql và tại sao không sử dụng đối tượng $ wpdb
BaiNET

thay vì tạo một bảng mới cho mỗi lần cài đặt blog, sẽ không có ý nghĩa hơn khi chỉ sử dụng một bảng nhưng thêm một cột cho blog_id? Theo cách đó, nếu chỉ có một blog thì ID blog luôn là 1. Nếu nhiều trang thì id blog được đặt theo ID trang web ...
Scott

Tôi muốn làm như vậy, nhưng tôi không biết làm thế nào. Tôi có thể tạo một cột cho các id blog tuy nhiên tôi không biết cách tạo một hàm cho điều đó.
Ken

Điều này hoạt động rất tốt, gần đây tôi đã thêm nó vào mã của tôi. newzealandgoonline.co.nz/...
NZGO

Câu trả lời:


12

Các đúng Mạng Hoạt meta-plugin được viết một cách chính xác đối với trường hợp như thế này.


Plugin đẹp. Tôi nghĩ bạn là tác giả. Tôi không thể từ bỏ vì tôi đã sử dụng 30 phiếu ngày hôm nay :(
Giri

Các plugin không giải quyết vấn đề của tôi. Hai trang web nơi tôi kích hoạt mạng plugin của tôi vẫn có 1 bảng cơ sở dữ liệu. Những gì tôi cần là cho họ để có các bảng cơ sở dữ liệu riêng biệt.
Ken

3
Điều đó có nghĩa là bạn đã không thêm tiền tố $ wpdb-> vào tên của họ.
scribu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.