$args Array of extra args. * * @return void */ private static function do_multisite( $network_wide, $method, $args = [] ) { global $wpdb; if ( is_multisite() && $network_wide ) { $activated = get_site_option( 'content_control_activated', [] ); /* phpcs:ignore WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.DirectQuery */ $blog_ids = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->blogs}" ); // Try to reduce the chances of a timeout with a large number of sites. if ( \count( $blog_ids ) > 2 ) { ignore_user_abort( true ); if ( ! \ContentControl\is_func_disabled( 'set_time_limit' ) ) { /* phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged */ @set_time_limit( 0 ); } } foreach ( $blog_ids as $blog_id ) { switch_to_blog( $blog_id ); call_user_func_array( $method, [ $args ] ); $activated[] = $blog_id; restore_current_blog(); } update_site_option( 'content_control_activated', $activated ); } else { call_user_func_array( $method, [ $args ] ); } } /** * Activate on single site. * * @return void */ public static function activate_site() { // Add a temporary option that will fire a hookable action on next load. \set_transient( '_content_control_installed', true, 3600 ); $version = plugin()->get( 'version' ); // Add version info. \add_option( 'content_control_version', [ 'version' => $version, 'upgraded_from' => null, 'initial_version' => $version, 'installed_on' => gmdate( 'Y-m-d H:i:s' ), ] ); // Add data versions if missing. \add_option( 'content_control_data_versioning', \ContentControl\current_data_versions() ); } /** * Deactivate on single site. * * @return void */ public static function deactivate_site() { } /** * Uninstall single site. * * @return void */ public static function uninstall_site() { } }