load_dependencies(); // Schema migrations load wp-admin/includes/upgrade.php, which pulls in // the whole admin bootstrap. Keep that off front-end, REST and cron // requests by deferring to admin_init. add_action( 'admin_init', [ Activator::class, 'maybe_upgrade' ] ); $this->register_hooks(); } public static function instance(): self { if ( null === self::$instance ) { self::$instance = new self(); } return self::$instance; } private function load_dependencies(): void { require_once FPCA_PLUGIN_DIR . 'includes/class-activator.php'; require_once FPCA_PLUGIN_DIR . 'includes/class-license.php'; require_once FPCA_PLUGIN_DIR . 'includes/class-admin.php'; require_once FPCA_PLUGIN_DIR . 'includes/class-post-tracker.php'; require_once FPCA_PLUGIN_DIR . 'includes/class-freshness-scorer.php'; require_once FPCA_PLUGIN_DIR . 'includes/class-gsc-connector.php'; require_once FPCA_PLUGIN_DIR . 'includes/class-assignments.php'; require_once FPCA_PLUGIN_DIR . 'includes/class-workflow.php'; require_once FPCA_PLUGIN_DIR . 'includes/class-acf-detector.php'; // Not a class file, so the autoloader cannot find it. require_once FPCA_PLUGIN_DIR . 'includes/view-helpers.php'; } private function register_hooks(): void { License::register(); ACF_Detector::register(); ( new Admin() )->register(); ( new Post_Tracker() )->register(); ( new Assignments() )->register(); ( new Freshness_Scorer() )->register(); ( new Workflow() )->register(); } }