' ) ? 'wcpay_get_jetpack_idc_custom_content' : wcpay_get_jetpack_idc_custom_content(); $jetpack_config = new Automattic\Jetpack\Config(); $jetpack_config->ensure( 'connection', [ 'slug' => 'woocommerce-payments', 'name' => 'WooPayments', ] ); $jetpack_config->ensure( 'identity_crisis', [ 'slug' => 'woocommerce-payments', 'customContent' => $custom_content, 'logo' => plugins_url( 'assets/images/logo.svg', WCPAY_PLUGIN_FILE ), 'admin_page' => '/wp-admin/admin.php?page=wc-admin', 'priority' => 5, ] ); // When only WooPayments is active, minimize the data to send back to WPCOM, tied to merchant's privacy settings. $jetpack_config->ensure( 'sync', array_merge_recursive( \Automattic\Jetpack\Sync\Data_Settings::MUST_SYNC_DATA_SETTINGS, [ 'jetpack_sync_modules' => [ 'Automattic\Jetpack\Sync\Modules\Full_Sync_Immediately', 'Automattic\Jetpack\Sync\Modules\Options', 'Automattic\Jetpack\Sync\Modules\Posts', 'Automattic\Jetpack\Sync\Modules\Meta', ], 'jetpack_sync_options_whitelist' => [ 'active_plugins', 'blogdescription', 'blogname', 'timezone_string', 'gmt_offset', ], ] ) ); // Trigger the first Jetpack full-sync when updating from old WCPay versions, // which do not have Jetpack Sync package. add_action( 'woocommerce_woocommerce_payments_updated', function () { $version_check = version_compare( '3.8.0', get_option( 'woocommerce_woocommerce_payments_version' ), '>' ); $method_check = method_exists( '\Automattic\Jetpack\Sync\Actions', 'do_only_first_initial_sync' ); if ( $version_check && $method_check ) { \Automattic\Jetpack\Sync\Actions::do_only_first_initial_sync(); } } ); } // Jetpack's Rest_Authentication needs to be initialized even before plugins_loaded. Automattic\Jetpack\Connection\Rest_Authentication::init(); // Jetpack-config will initialize the modules on "plugins_loaded" with priority 2, so this code needs to be run before that. add_action( 'plugins_loaded', 'wcpay_jetpack_init', 1 ); /** * Initialize the extension. Note that this gets called on the "plugins_loaded" filter, * so WooCommerce classes are guaranteed to exist at this point (if WooCommerce is enabled). */ function wcpay_init() { require_once WCPAY_ABSPATH . '/includes/class-wc-payments.php'; require_once WCPAY_ABSPATH . '/includes/class-wc-payments-payment-request-session.php'; WC_Payments::init(); /** * Needs to be loaded as soon as possible * Check https://github.com/Automattic/woocommerce-payments/issues/4759 */ \WCPay\WooPay\WooPay_Session::init(); ( new WC_Payments_Payment_Request_Session() )->init(); // @todo This is a temporary solution that will be replaced by a dedicated VAT settings section. // Remove this initialization when the permanent solution is implemented. require_once WCPAY_ABSPATH . '/includes/class-wc-payments-vat-redirect-service.php'; ( new \WCPay\WC_Payments_VAT_Redirect_Service() )->init_hooks(); } // Make sure this is run *after* WooCommerce has a chance to initialize its packages (wc-admin, etc). That is run with priority 10. // If you change the priority of this action, you'll need to change it in the wcpay_check_old_jetpack_version function too. add_action( 'plugins_loaded', 'wcpay_init', 11 ); if ( ! function_exists( 'wcpay_init_subscriptions_core' ) ) { /** * Initialise subscriptions-core if WC Subscriptions (the plugin) isn't loaded */ function wcpay_init_subscriptions_core() { if ( ! class_exists( 'WooCommerce' ) || ! WC_Payments_Features::is_wcpay_subscriptions_enabled() ) { return; } $is_plugin_active = function ( $plugin_name ) { $plugin_slug = "$plugin_name/$plugin_name.php"; // Check if the specified $plugin_name is in the process of being activated via the Admin > Plugins screen. if ( isset( $_REQUEST['action'], $_REQUEST['_wpnonce'] ) && current_user_can( 'activate_plugin', $plugin_slug ) ) { $action = sanitize_text_field( wp_unslash( $_REQUEST['action'] ) ); $activating_plugin = ''; switch ( $action ) { case 'activate': case 'activate-plugin': if ( isset( $_REQUEST['plugin'] ) && wp_verify_nonce( wc_clean( wp_unslash( $_REQUEST['_wpnonce'] ) ), "activate-plugin_{$plugin_slug}" ) ) { $activating_plugin = sanitize_text_field( wp_unslash( $_REQUEST['plugin'] ) ); } break; case 'activate-selected': // When multiple plugins are being activated at once the $_REQUEST['checked'] is an array of plugin slugs. Check if the specified $plugin_name is in that array. if ( isset( $_REQUEST['checked'] ) && is_array( $_REQUEST['checked'] ) && in_array( $plugin_slug, $_REQUEST['checked'], true ) && wp_verify_nonce( wc_clean( wp_unslash( $_REQUEST['_wpnonce'] ) ), 'bulk-plugins' ) ) { $activating_plugin = $plugin_slug; } break; } if ( ! empty( $activating_plugin ) && $plugin_slug === $activating_plugin ) { return true; } } // Check if specified $plugin_name is in the process of being activated via the WP CLI. if ( defined( 'WP_CLI' ) && WP_CLI && isset( $GLOBALS['argv'] ) ) { $expected_arguments = [ 'plugin', 'activate', $plugin_name, ]; if ( array_intersect( $expected_arguments, $GLOBALS['argv'] ) === $expected_arguments ) { return true; } } // Check if specified $plugin_name is active on a multisite installation via site wide plugins. if ( is_multisite() ) { $plugins = get_site_option( 'active_sitewide_plugins' ); if ( isset( $plugins[ $plugin_slug ] ) ) { return true; } } // Finally check if specified $plugin_name is active. if ( class_exists( 'Automattic\WooCommerce\Admin\PluginsHelper' ) ) { return Automattic\WooCommerce\Admin\PluginsHelper::is_plugin_active( $plugin_slug ); } else { if ( ! function_exists( 'is_plugin_active' ) ) { include_once ABSPATH . 'wp-admin/includes/plugin.php'; } return is_plugin_active( $plugin_slug ); } }; $is_subscriptions_active = $is_plugin_active( 'woocommerce-subscriptions' ); $is_wcs_core_active = $is_plugin_active( 'woocommerce-subscriptions-core' ); $wcs_core_path = $is_wcs_core_active ? WP_PLUGIN_DIR . '/woocommerce-subscriptions-core/' : WCPAY_SUBSCRIPTIONS_ABSPATH; /** * If the current request is to activate subscriptions, don't load the subscriptions-core package. * * WP loads the newly activated plugin's base file later than `plugins_loaded`, and so there's no opportunity for us to not load our core feature set on a consistent hook. * We also cannot init subscriptions core too late, because if we do, we miss hooks that register the subscription post types etc. */ if ( $is_subscriptions_active ) { return; } require_once $wcs_core_path . 'includes/class-wc-subscriptions-core-plugin.php'; new WC_Subscriptions_Core_Plugin(); } } add_action( 'plugins_loaded', 'wcpay_init_subscriptions_core', 0 ); /** * Check if WCPay is installed alongside an old version of Jetpack (8.1 or earlier). Due to the autoloader code in those old * versions, the Jetpack Config initialization code would just crash the site. * TODO: Remove this when Jetpack 8.1 (Released on January 2020) is so old we don't think anyone will run into this problem anymore. * * @return bool True if the plugin can keep initializing itself, false otherwise. */ function wcpay_check_old_jetpack_version() { if ( defined( 'JETPACK__VERSION' ) && version_compare( JETPACK__VERSION, '8.2', '<' ) && JETPACK__VERSION !== 'wpcom' ) { add_filter( 'admin_notices', 'wcpay_show_old_jetpack_notice' ); // Prevent the rest of the plugin from initializing. remove_action( 'plugins_loaded', 'wcpay_init', 11 ); return false; } return true; } /** * Display an error notice if the installed Jetpack version is too old to even start initializing the plugin. */ function wcpay_show_old_jetpack_notice() { ?>
WooPayments
Recommended for
Please note that creating a fresh connection for
Recommended for
Please note that staying in Safe Mode will cause issues for some %s features such as dispute and refund updates, payment confirmations for local payment methods.