booted ) { return; } $this->booted = true; // WordPress.org builds rely on translate.wordpress.org language packs, loaded by WordPress itself. // Only the CodeCanyon build ships its own .mo files; that file is left out of the wordpress.org package. if ( Distribution::is_codecanyon() && class_exists( BundledTranslations::class ) ) { BundledTranslations::register(); } // Fatal errors are recorded on every request (front end too); this is local only, no remote calls. ( new Errors\FatalErrorRecorder( new Errors\ErrorStore() ) )->register(); ( new Security\Monitor( new Security\EventStore() ) )->register(); // Plugin/theme/core changes, so a new fatal error can be linked to the update before it (local). ( new Changes\ChangeLog() )->register(); // Store checks only switch on when WooCommerce is active; the core works without it. ( new WooCommerce\Module() )->register(); ( new Mail\WeeklyEmail() )->register(); ( new Mail\CriticalAlert() )->register(); // Only answers while an admin's connect request is running (see Cloud\VerifyEndpoint). ( new Cloud\VerifyEndpoint() )->register(); Cloud\Reporter::register(); Cloud\RemoteConfig::register(); if ( is_admin() ) { ( new Admin\ConnectionPanel() )->register(); // Upgrade path: align cron events with settings (admin only, never on front-end requests). add_action( 'admin_init', array( Settings::class, 'on_admin_init' ) ); add_action( 'admin_init', array( Cloud\Reporter::class, 'sync' ) ); ( new Admin\Menu() )->register(); ( new Admin\DashboardWidget() )->register(); } } }