register(); } if (class_exists(Banner::class) && Options::get('banner_enabled', false)) { (new Banner())->register(); } // Frontend and WooCommerce tracking share one queue so the footer renders WooCommerce events $dispatcher = new EventDispatcher(); // Initialize Frontend Tracking if (class_exists(FrontendTracker::class)) { (new FrontendTracker($dispatcher))->register(); } // Initialize WooCommerce Tracking if (class_exists(WooCommerceTracker::class)) { (new WooCommerceTracker($dispatcher))->register(); } // Initialize Hybrid Server Dispatch if (class_exists(ServerDispatch::class) && Options::get('wc_server_dispatch', true)) { (new ServerDispatch())->register(); } // Initialize Form Tracking if (class_exists(FormsTracker::class) && Options::get('track_forms', true)) { (new FormsTracker())->register(); } // Instagram posts rendered by Zaraz (shortcode and pasted links) if (class_exists(\WPZaraz\Embeds\InstagramEmbeds::class)) { (new \WPZaraz\Embeds\InstagramEmbeds())->register(); } // Initialize Pro Tracking Suite (User lifecycle & premium forms) if (class_exists(\WPZaraz\Tracking\ProTracker::class) && \WPZaraz\Licensing\FeatureGate::hasAccess('pro_tracking')) { (new \WPZaraz\Tracking\ProTracker())->register(); } // Initialize Admin UI if (is_admin() && class_exists(AdminController::class)) { (new AdminController())->register(); (new \WPZaraz\Admin\ReviewPrompt())->register(); (new \WPZaraz\Admin\DebugTools())->register(); } // Initialize Licensing if (class_exists(LicenseManager::class)) { (new LicenseManager())->register(); } } /** * Declares compatibility with WooCommerce High-Performance Order Storage (HPOS). */ public function declareHposCompatibility(): void { if (class_exists('\Automattic\WooCommerce\Utilities\FeaturesUtil')) { $entryFile = defined('ZBRIDGE_FILE') ? ZBRIDGE_FILE : (defined('WP_ZBRIDGE_FILE') ? WP_ZBRIDGE_FILE : (defined('ZBRIDGE_PATH') ? ZBRIDGE_PATH . 'wp-zbridge.php' : (defined('WP_ZBRIDGE_PATH') ? WP_ZBRIDGE_PATH . 'wp-zbridge.php' : __FILE__))); \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility('custom_order_tables', $entryFile, true); } } }