register_activation_hook( __FILE__, 'pluginname_register_activation_hook' ); register_deactivation_hook( __FILE__, 'pluginname_register_deactivation_hook' ); function pluginname_create_database_table() { $table_name = 'plugin_table_name'; if( ! pluginname_database_table_exists( $table_name ) ) { $sql = "CREATE TABLE " . $table_name . " ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(250) NOT NULL DEFAULT '', date_created DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' ) CHARACTER SET utf8 COLLATE utf8_unicode_ci;"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } } function pluginname_database_table_exists( $table_name ) { global $wpdb; return strtolower( $wpdb->get_var("SHOW TABLES LIKE '$table_name'") ) == strtolower( $table_name ); } function pluginname_register_activation_hook() { if( function_exists('is_multisite') && is_multisite() ) { if( isset($_GET['networkwide']) && ( $_GET['networkwide'] == 1 ) ) { pluginname_call_function_for_each_site( 'pluginname_activate' ); return; } } pluginname_activate(); // otherwise do it for a single blog/site } function pluginname_activate() { pluginname_create_database_table(); update_option( PLUGINNAME_VERSION_KEY, PLUGINNAME_VERSION_NUM ); } function pluginname_register_deactivation_hook() { if( function_exists( 'is_multisite' ) && is_multisite() ) { if( isset( $_GET['networkwide'] ) && ( $_GET['networkwide'] == 1 ) ) { pluginname_call_function_for_each_site( 'pluginname_deactivate' ); return; } } pluginname_deactivate(); // otherwise do it for a single blog/site } function pluginname_deactivate() { delete_option( PLUGINNAME_VERSION_KEY ); } function pluginname_call_function_for_each_site( $function ) { global $wpdb; // Hold this so we can switch back to it $root_blog = $wpdb->blogid; // Get all the blogs/sites in the network and invoke the function for each one $blog_ids = $wpdb->get_col($wpdb->prepare("SELECT blog_id FROM $wpdb->blogs")); foreach ($blog_ids as $blog_id) { switch_to_blog($blog_id); call_user_func($function); } // Now switch back to the root blog switch_to_blog($root_blog); }