diff --git a/plugin-name/class-plugin-name.php b/plugin-name/class-plugin-name.php index fd7510f..91e2d68 100644 --- a/plugin-name/class-plugin-name.php +++ b/plugin-name/class-plugin-name.php @@ -67,6 +67,9 @@ class Plugin_Name { // Load plugin text domain add_action( 'init', array( $this, 'load_plugin_textdomain' ) ); + + // Activate plugin when new blog is added + add_action( 'wpmu_new_blog', array( $this, 'activate_new_site' ) ); // Add the options page and menu item. // add_action( 'admin_menu', array( $this, 'add_plugin_admin_menu' ) ); @@ -115,7 +118,22 @@ class Plugin_Name { * @param boolean $network_wide True if WPMU superadmin uses "Network Activate" action, false if WPMU is disabled or plugin is activated on an individual blog. */ public static function activate( $network_wide ) { - // TODO: Define activation functionality here + if ( function_exists( 'is_multisite' ) && is_multisite() ) { + if ( $network_wide ) { + // Get all blog ids + $blog_ids = self::get_blog_ids(); + + foreach ( $blog_ids as $blog_id ) { + switch_to_blog( $blog_id ); + self::single_activate(); + } + restore_current_blog(); + } else { + self::single_activate(); + } + } else { + self::single_activate(); + } } /** @@ -126,6 +144,75 @@ class Plugin_Name { * @param boolean $network_wide True if WPMU superadmin uses "Network Deactivate" action, false if WPMU is disabled or plugin is deactivated on an individual blog. */ public static function deactivate( $network_wide ) { + if ( function_exists( 'is_multisite' ) && is_multisite() ) { + if ( $network_wide ) { + // Get all blog ids + $blog_ids = self::get_blog_ids(); + + foreach ( $blog_ids as $blog_id ) { + switch_to_blog( $blog_id ); + self::single_deactivate(); + } + restore_current_blog(); + } else { + self::single_deactivate(); + } + } else { + self::single_deactivate(); + } + } + + /** + * Fired when a new site is activated with a WPMU environment. + * + * @since 1.0.0 + * + * @param int $blog_id ID of the new blog. + */ + public function activate_new_site( $blog_id ) { + if ( 1 !== did_action( 'wpmu_new_blog' ) ) + return; + + switch_to_blog( $blog_id ); + self::single_activate(); + restore_current_blog(); + } + + /** + * Get all blog ids of blogs in the current network that are: + * - not archived + * - not spam + * - not deleted + * + * @since 1.0.0 + * + * @return array|false The blog ids, false if no matches. + */ + private static function get_blog_ids() { + global $wpdb; + + // get an array of blog ids + $sql = "SELECT blog_id FROM $wpdb->blogs + WHERE archived = '0' AND spam = '0' + AND deleted = '0'"; + return $wpdb->get_col( $sql ); + } + + /** + * Fired for each blog when the plugin is activated. + * + * @since 1.0.0 + */ + private static function single_activate() { + // TODO: Define activation functionality here + } + + /** + * Fired for each blog when the plugin is deactivated. + * + * @since 1.0.0 + */ + private static function single_deactivate() { // TODO: Define deactivation functionality here }