Inledning
Stötte för någon vecka på ett nytt problem för min del. Det handlade om att jag skulle skapa ett plugin som används i multi-site. Jag har jobbat relativt lite med Multi-Sites och problemet var att tabellerna inte skapades för alla “siterna” som fanns i nätverket.
Källkod
register_activation_hook(__FILE__, 'hass_vote_activate');
function hass_vote_activate() {
global $wpdb;
if (function_exists('is_multisite') && is_multisite()) {
if (isset($_GET['networkwide']) && ($_GET['networkwide'] == 1)) {
$old_blog = $wpdb->blogid;
$blogids = $wpdb->get_col($wpdb->prepare("SELECT blog_id FROM $wpdb->blogs"));
foreach ($blogids as $blog_id) {
switch_to_blog($blog_id);
_hass_vote_activate();
}
switch_to_blog($old_blog);
return;
}
}
_hass_vote_activate();
}
function _hass_vote_activate() {
global $wpdb;
$table_name = $wpdb->prefix . 'yourtable';
if ($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {
$sql = "CREATE TABLE " . $table_name . " (
id mediumint(9) NOT NULL AUTO_INCREMENT,
dateadded bigint(11) DEFAULT '0' NOT NULL,
subject VARCHAR(255) NOT NULL,
UNIQUE KEY id (id)
);";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
}
Ovanstående kod vandrar igenom alla dina siter som är uppsatta i nätverket och kör aktiveringsfunktionen för dessa.
Koden ovan raderar inte tabellerna vid inaktivering, det skapar heller inte tabellerna för nya siter som aktiveras i nätverket. Du får i sådana fall använda följande actions:
add_action( 'wpmu_new_blog', 'your_function_activation_on_new_blog'); // For new site
register_deactivation_hook( __FILE__, 'your_deactivation_function' ); // For deactivation