AssetsController::update_block_settings_dependencies()publicWC 1.0

Fix scripts with wc-settings dependency.

The wc-settings script only works correctly when enqueued in the footer. This is to give blocks etc time to register their settings data before it's printed.

This code will look at registered scripts, and if they have a wc-settings dependency, force them to print in the footer instead of the header.

This only supports packages known to require wc-settings!

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

Хуков нет.


null. Ничего.


$AssetsController = new AssetsController();


Код AssetsController::update_block_settings_dependencies() WC 7.1.0

public function update_block_settings_dependencies() {
	$wp_scripts     = wp_scripts();
	$known_packages = [ 'wc-settings', 'wc-blocks-checkout', 'wc-price-format' ];

	foreach ( $wp_scripts->registered as $handle => $script ) {
		// scripts that are loaded in the footer has extra->group = 1.
		if ( array_intersect( $known_packages, $script->deps ) && ! isset( $script->extra['group'] ) ) {
			// Append the script to footer.
			$wp_scripts->add_data( $handle, 'group', 1 );
			// Show a warning.
			$error_handle  = 'wc-settings-dep-in-header';
			$used_deps     = implode( ', ', array_intersect( $known_packages, $script->deps ) );
			$error_message = "Scripts that have a dependency on [$used_deps] must be loaded in the footer, {$handle} was registered to load in the header, but has been switched to load in the footer instead. See";
			// phpcs:ignore WordPress.WP.EnqueuedResourceParameters.NotInFooter,WordPress.WP.EnqueuedResourceParameters.MissingVersion
			wp_register_script( $error_handle, '' );
			wp_enqueue_script( $error_handle );
				sprintf( 'console.warn( "%s" );', $error_message )