%s

', esc_html( sprintf( /* translators: 1: required PHP version, 2: PHP version running on this site. */ __( 'AdPix Analytics requires PHP %1$s or newer. This site runs PHP %2$s, so the plugin is inactive.', 'adpix-analytics' ), MIN_PHP, PHP_VERSION ) ) ); } ); return; } require_once ADPIX_ANALYTICS_PATH . 'src/Autoloader.php'; Autoloader::register( __NAMESPACE__, ADPIX_ANALYTICS_PATH . 'src' ); /** * The plugin's single composition root. * * Everything else is constructed inside it and receives its collaborators as constructor arguments, * so no class anywhere below reaches for a global to find a dependency. */ function plugin(): Plugin { static $instance = null; if ( null === $instance ) { $instance = new Plugin(); } return $instance; } add_action( 'plugins_loaded', static fn() => plugin()->boot(), 5 ); /** * WooCommerce feature declarations must run on `before_woocommerce_init`, which fires before * `plugins_loaded`. Without them WooCommerce marks the plugin incompatible and can refuse to enable * HPOS at all; every order access in this plugin goes through the CRUD API, so both the legacy post * storage and the custom order tables work. */ add_action( 'before_woocommerce_init', static function () { if ( ! class_exists( \Automattic\WooCommerce\Utilities\FeaturesUtil::class ) ) { return; } \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', ADPIX_ANALYTICS_FILE, true ); \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'cart_checkout_blocks', ADPIX_ANALYTICS_FILE, true ); } ); register_activation_hook( ADPIX_ANALYTICS_FILE, array( Activator::class, 'activate' ) ); register_deactivation_hook( ADPIX_ANALYTICS_FILE, array( Deactivator::class, 'deactivate' ) );