register(); add_filter('cron_schedules', [Cron::class, 'addInterval']); add_action(Cron::HOOK, [$cron, 'run']); // nachplanen, falls der Lauf fehlt: eine Website, die nach der Netzwerkaktivierung dazukam, hat keinen – und // ohne ihn bleibt genau das Lebenszeichen aus, um das es geht. Mit vorhandenem Lauf kostet das eine Abfrage // der (zwischengespeicherten) Cron-Option Cron::schedule(); add_action('rest_api_init', [$connect, 'register']); add_action('admin_menu', [$settingsPage, 'register']); add_action('wp_dashboard_setup', [$widget, 'register']); add_action('admin_post_domainwarn_settings', [$settingsPage, 'handle']); add_action('admin_post_'.SettingsPage::CONNECT_ACTION, [$settingsPage, 'connect']); add_filter('plugin_action_links_'.plugin_basename($file), static function (array $links): array { $url = admin_url('options-general.php?page='.SettingsPage::MENU_SLUG); array_unshift($links, ''.esc_html__('Settings', 'domainwarn').''); return $links; }); if (defined('WP_CLI') && WP_CLI) { $cli = new Cli($site, $factory, $report); \WP_CLI::add_command('domainwarn test', [$cli, 'test']); \WP_CLI::add_command('domainwarn sync', [$cli, 'sync']); \WP_CLI::add_command('domainwarn report', [$cli, 'report']); } } /** * Bei der Aktivierung: geplanten Lauf einrichten. Gemeldet wird erst, wenn das Token eingetragen ist. Im Netzwerk * hat jede Website ihren eigenen Cron – aktiviert für das ganze Netzwerk, bekommt jede ihren Lauf, nicht nur die * Hauptseite, auf der die Aktivierung läuft. */ public static function activate(bool $networkWide = false): void { self::eachSite($networkWide, [Cron::class, 'schedule']); } /** Bei der Deaktivierung: geplanten Lauf abbestellen. Einstellungen bleiben – wer wieder einschaltet, ist fertig. */ public static function deactivate(bool $networkWide = false): void { self::eachSite($networkWide, [Cron::class, 'unschedule']); } /** Auf jeder Website des Netzwerks ausführen, sonst nur auf der aktuellen. */ private static function eachSite(bool $networkWide, callable $task): void { if (! $networkWide || ! is_multisite()) { $task(); return; } // number 0: ohne Obergrenze – die Vorgabe wären 100 Websites, und die 101. hätte stillschweigend keinen Lauf foreach (get_sites(['fields' => 'ids', 'number' => 0]) as $siteId) { switch_to_blog((int) $siteId); $task(); restore_current_blog(); } } /** Beim Löschen: auch die Einstellungen gehen, samt Token, der zwischengespeicherte Stand und die security.txt. */ public static function uninstall(): void { delete_option(Settings::OPTION); delete_option(WpSiteContext::HOSTING_OPTION); delete_option(SecurityTxtResponder::CHECK_OPTION); delete_option(WpSecurityTxtStore::LAST_GOOD_OPTION); delete_transient(WpSecurityTxtStore::CACHE_TRANSIENT); delete_option(WpSiteContext::STATISTICS_OPTION); } }