Quiero que mi complemento se instale en cada blog y cree tablas de base de datos por blog. Tengo este codigo:
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 {
}
El código está inspirado en esta publicación de blog [http://shibashake.com/wordpress-theme/write-a-plugin-for-wordpress-multi-site]
El archivo SQL consta de:
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)
);
Sin embargo, no funciona, el complemento crea tablas como en un wordpress normal pero no en cada blog en el entorno multisitio.
¡Por favor ayuda!
qué hay en el archivo ossq.sql y por qué no usar el objeto $ wpdb
—
Bainternet
en lugar de crear una nueva tabla para cada instalación de blog, ¿no tendría más sentido usar solo una tabla, pero agregar una columna para blog_id? De esta forma si sólo hay un blog de la ID blog es siempre 1. Si multisitio entonces el ID del blog se establece de acuerdo con el ID de sitio ...
—
a Scott
Quería hacerlo, pero no sé cómo hacerlo. Puedo hacer una columna para los identificadores de blog, sin embargo, no sé cómo crear una función para eso.
—
Ken
Esto funciona muy bien, lo he agregado recientemente en mi código. newzealandgoonline.co.nz/…
—
NZGO