'ids', 'number' => 100, 'offset' => $offset, 'orderby' => 'id', 'order' => 'ASC', 'network_id' => $network ?? 0, ]); foreach ($ids as $id) { yield (int) $id; } $offset += count($ids); } while (count($ids) === 100); } public static function run(int $site, callable $callback) { $switch = get_current_blog_id() !== $site; if ($switch) { switch_to_blog($site); } try { return $callback(); } finally { if ($switch) { restore_current_blog(); } } } public static function schedule(): void { if (!wp_next_scheduled('apeari_cleanup')) { wp_schedule_event(time() + HOUR_IN_SECONDS, 'daily', 'apeari_cleanup'); } } public static function activate(bool $network = false): void { $sites = $network && is_multisite() ? self::ids(get_current_network_id()) : [get_current_blog_id()]; foreach ($sites as $site) { self::run($site, static function () { APEARI_Settings::migrate(); self::schedule(); update_option('apeari_privacy_version', APEARI_VERSION, false); }); } if ($network && is_multisite()) { update_network_option(null, 'apeari_privacy_version', APEARI_VERSION); } } public static function deactivate(bool $network = false): void { foreach ( $network && is_multisite() ? self::ids(get_current_network_id()) : [get_current_blog_id()] as $site ) { self::run($site, static fn() => wp_clear_scheduled_hook('apeari_cleanup')); } } public static function boot(): void { add_action('init', [__CLASS__, 'schedule']); add_action('admin_init', static function () { if (!current_user_can('manage_options')) { return; } $network = is_multisite() && isset(get_site_option('active_sitewide_plugins', [])['apeari/apeari.php']); $version = $network ? get_network_option(null, 'apeari_privacy_version') : get_option('apeari_privacy_version'); if ($version !== APEARI_VERSION) { self::activate($network); } }); add_action( 'wp_initialize_site', static function ($site) { if ( isset( get_network_option((int) $site->network_id, 'active_sitewide_plugins', [])[ 'apeari/apeari.php' ], ) ) { self::run((int) $site->blog_id, static function () { APEARI_Settings::migrate(); self::schedule(); }); } }, 200, ); } }