'install-plugin', 'plugin' => 'woocommerce', ], admin_url( 'update.php' ) ), 'install-plugin_woocommerce' ); $admin_notice_content = sprintf( // translators: 1$-2$: opening and closing tags, 3$-4$: link tags, takes to woocommerce plugin on wp.org, 5$-6$: opening and closing link tags, leads to plugins.php in admin esc_html__( '%1$sWooCommerce Stripe Gateway is inactive.%2$s The %3$sWooCommerce plugin%4$s must be active for the Stripe Gateway to work. Please %5$sinstall & activate WooCommerce »%6$s', 'woocommerce-gateway-stripe' ), '', '', '', '', '', '' ); echo '
'; echo '

' . wp_kses_post( $admin_notice_content ) . '

'; echo '
'; } /** * WooCommerce not supported fallback notice. * * @since 4.4.0 */ function woocommerce_stripe_wc_not_supported() { /* translators: $1. Minimum WooCommerce version. $2. Current WooCommerce version. */ echo '

' . sprintf( esc_html__( 'Stripe requires WooCommerce %1$s or greater to be installed and active. WooCommerce %2$s is no longer supported.', 'woocommerce-gateway-stripe' ), esc_html( WC_STRIPE_MIN_WC_VER ), esc_html( WC_VERSION ) ) . '

'; } /** * Initialize the autoloader for the plugin. * * @since 10.8.0 * @return bool Return whether the autoloader is available. */ function woocommerce_stripe_init_autoloader(): bool { static $autoloader_initialized = null; if ( true === $autoloader_initialized ) { return true; } $autoloader_initialized = false; if ( file_exists( WC_STRIPE_PLUGIN_PATH . '/vendor/autoload.php' ) ) { $autoloader_initialized = true; require_once WC_STRIPE_PLUGIN_PATH . '/vendor/autoload.php'; } return $autoloader_initialized; } function woocommerce_gateway_stripe() { static $plugin; if ( ! isset( $plugin ) ) { woocommerce_stripe_init_autoloader(); require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe.php'; $plugin = WC_Stripe::get_instance(); } return $plugin; } add_action( 'plugins_loaded', 'woocommerce_gateway_stripe_init' ); function woocommerce_gateway_stripe_init() { if ( ! class_exists( 'WooCommerce' ) ) { add_action( 'admin_notices', 'woocommerce_stripe_missing_wc_notice' ); return; } if ( version_compare( WC_VERSION, WC_STRIPE_MIN_WC_VER, '<' ) ) { add_action( 'admin_notices', 'woocommerce_stripe_wc_not_supported' ); return; } woocommerce_gateway_stripe(); } /** * Add woocommerce_inbox_variant for the Remote Inbox Notification. * * P2 post can be found at https://wp.me/paJDYF-1uJ. */ if ( ! function_exists( 'add_woocommerce_inbox_variant' ) ) { function add_woocommerce_inbox_variant() { $config_name = 'woocommerce_inbox_variant_assignment'; if ( false === get_option( $config_name, false ) ) { update_option( $config_name, wp_rand( 1, 12 ) ); } } } register_activation_hook( __FILE__, 'add_woocommerce_inbox_variant' ); register_activation_hook( __FILE__, 'wc_stripe_set_settings_redirection_transient' ); /** * Set a transient to redirect the user to the settings page upon activation. * * @return void */ function wc_stripe_set_settings_redirection_transient(): void { set_transient( 'wc_stripe_redirect_to_settings', true, 30 ); } function wcstripe_deactivated(): void { // If we don't have the autoloader available, return early before we call any dependent code. // This should only occur in development environments. if ( ! woocommerce_stripe_init_autoloader() ) { return; } // admin notes are not supported on older versions of WooCommerce. if ( class_exists( 'WC_Stripe_Inbox_Notes' ) && WC_Stripe_Inbox_Notes::are_inbox_notes_supported() ) { // requirements for the note require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-feature-flags.php'; require_once WC_STRIPE_PLUGIN_PATH . '/includes/notes/class-wc-stripe-upe-stripelink-note.php'; WC_Stripe_UPE_StripeLink_Note::possibly_delete_note(); } require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-database-cache.php'; WC_Stripe_Database_Cache::unschedule_daily_async_cleanup(); // Cancel scheduled Agentic Commerce feed syncs. if ( interface_exists( 'Automattic\WooCommerce\Internal\ProductFeed\Feed\FeedInterface' ) ) { $integration = new WC_Stripe_Agentic_Commerce_Integration(); $integration->deactivate(); } } register_deactivation_hook( __FILE__, 'wcstripe_deactivated' ); // Hook in Blocks integration. This action is called in a callback on plugins loaded, so current Stripe plugin class // implementation is too late. add_action( 'woocommerce_blocks_loaded', 'woocommerce_gateway_stripe_woocommerce_block_support' ); function woocommerce_gateway_stripe_woocommerce_block_support() { if ( class_exists( 'Automattic\WooCommerce\Blocks\Payments\Integrations\AbstractPaymentMethodType' ) ) { require_once WC_STRIPE_PLUGIN_PATH . '/includes/class-wc-stripe-blocks-support.php'; // priority is important here because this ensures this integration is // registered before the WooCommerce Blocks built-in Stripe registration. // Blocks code has a check in place to only register if 'stripe' is not // already registered. add_action( 'woocommerce_blocks_payment_method_type_registration', function ( Automattic\WooCommerce\Blocks\Payments\PaymentMethodRegistry $payment_method_registry ) { // I noticed some incompatibility with WP 5.x and WC 5.3 when `_wcstripe_feature_upe_settings` is enabled. if ( ! class_exists( 'WC_Stripe_Express_Checkout_Element' ) ) { return; } $container = Automattic\WooCommerce\Blocks\Package::container(); // registers as shared instance. $container->register( WC_Stripe_Blocks_Support::class, function () { if ( class_exists( 'WC_Stripe' ) ) { return new WC_Stripe_Blocks_Support( null, WC_Stripe::get_instance()->express_checkout_configuration ); } else { return new WC_Stripe_Blocks_Support(); } } ); $payment_method_registry->register( $container->get( WC_Stripe_Blocks_Support::class ) ); }, 5 ); } } add_action( 'before_woocommerce_init', function () { if ( class_exists( '\Automattic\WooCommerce\Utilities\FeaturesUtil' ) ) { \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'cart_checkout_blocks', __FILE__, true ); \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true ); } } );