Automattic\WooCommerce\Blocks\Payments

Api::verify_payment_methods_dependencies()publicWC 1.0

Verify all dependencies of registered payment methods have been registered. If not, remove that payment method script from the list of dependencies of Cart and Checkout block scripts so it doesn't break the blocks and show an error in the admin.

Метод класса: Api{}

Хуков нет.

Возвращает

null. Ничего (null).

Использование

$Api = new Api();
$Api->verify_payment_methods_dependencies();

Код Api::verify_payment_methods_dependencies() WC 8.7.0

public function verify_payment_methods_dependencies() {
	// Check that the wc-blocks script is registered before continuing. Some extensions may cause this function to run
	// before the payment method scripts' dependencies are registered.
	if ( ! wp_script_is( 'wc-blocks', 'registered' ) ) {
		return;
	}
	$wp_scripts             = wp_scripts();
	$payment_method_scripts = $this->payment_method_registry->get_all_active_payment_method_script_dependencies();

	foreach ( $payment_method_scripts as $payment_method_script ) {
		if (
			! array_key_exists( $payment_method_script, $wp_scripts->registered ) ||
			! property_exists( $wp_scripts->registered[ $payment_method_script ], 'deps' )
		) {
			continue;
		}
		$deps = $wp_scripts->registered[ $payment_method_script ]->deps;
		foreach ( $deps as $dep ) {
			if ( ! wp_script_is( $dep, 'registered' ) ) {
				$error_handle  = $dep . '-dependency-error';
				$error_message = sprintf(
					'Payment gateway with handle \'%1$s\' has been deactivated in Cart and Checkout blocks because its dependency \'%2$s\' is not registered. Read the docs about registering assets for payment methods: https://github.com/woocommerce/woocommerce-blocks/blob/060f63c04f0f34f645200b5d4da9212125c49177/docs/third-party-developers/extensibility/checkout-payment-methods/payment-method-integration.md#registering-assets',
					esc_html( $payment_method_script ),
					esc_html( $dep )
				);

				// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
				error_log( $error_message );

				// phpcs:ignore WordPress.WP.EnqueuedResourceParameters.NotInFooter,WordPress.WP.EnqueuedResourceParameters.MissingVersion
				wp_register_script( $error_handle, '' );
				wp_enqueue_script( $error_handle );
				wp_add_inline_script(
					$error_handle,
					sprintf( 'console.error( "%s" );', $error_message )
				);

				$cart_checkout_scripts = [ 'wc-cart-block', 'wc-cart-block-frontend', 'wc-checkout-block', 'wc-checkout-block-frontend' ];
				foreach ( $cart_checkout_scripts as $script_handle ) {
					if (
						! array_key_exists( $script_handle, $wp_scripts->registered ) ||
						! property_exists( $wp_scripts->registered[ $script_handle ], 'deps' )
					) {
						continue;
					}
					// Remove payment method script from dependencies.
					$wp_scripts->registered[ $script_handle ]->deps = array_diff(
						$wp_scripts->registered[ $script_handle ]->deps,
						[ $payment_method_script ]
					);
				}
			}
		}
	}
}