Commit 95ea702fdf2 for woocommerce
commit 95ea702fdf25dfeaa3924fde779bee22c3832e4c
Author: Luigi Teschio <gigitux@gmail.com>
Date: Mon Aug 3 18:27:12 2026 +0200
Register legacy block bundle compatibility placeholders (#67055)
* Register deprecated block bundle placeholders
* Add changelog entry for deprecated block bundle placeholders
* fix warning message
* clean up documentation
* register deprecated script only on the admin context
* update deprecated script handles to include 'wc-block-library' dependency
diff --git a/plugins/woocommerce/changelog/fix-register-deprecated-block-bundle-handles b/plugins/woocommerce/changelog/fix-register-deprecated-block-bundle-handles
new file mode 100644
index 00000000000..b12dc01b410
--- /dev/null
+++ b/plugins/woocommerce/changelog/fix-register-deprecated-block-bundle-handles
@@ -0,0 +1,4 @@
+Significance: patch
+Type: fix
+
+Register legacy block bundle handles as deprecated compatibility placeholders when unified editor assets are enabled.
diff --git a/plugins/woocommerce/client/blocks/docs/internal-developers/enqueueable-packages/README.md b/plugins/woocommerce/client/blocks/docs/internal-developers/enqueueable-packages/README.md
index 6efb16d3024..1d3092f9494 100644
--- a/plugins/woocommerce/client/blocks/docs/internal-developers/enqueueable-packages/README.md
+++ b/plugins/woocommerce/client/blocks/docs/internal-developers/enqueueable-packages/README.md
@@ -26,6 +26,8 @@ When the experiment is enabled, WooCommerce block types use:
These assets replace WooCommerce's per-block editor assets. They do not combine every script loaded by the editor: shared WordPress dependencies and the enqueueable WooCommerce packages below remain external.
+The legacy per-block handles, such as `wc-cart-block` and `wc-checkout-block`, remain registered as compatibility placeholders. They preserve their dependency on `wc-blocks` but do not load the former per-block files, and log a deprecation warning when enqueued.
+
## External package dependencies
The generated asset file for `wc-block-library` declares packages that remain separate scripts:
diff --git a/plugins/woocommerce/src/Blocks/AssetsController.php b/plugins/woocommerce/src/Blocks/AssetsController.php
index 5f650bee231..19c880e0f86 100644
--- a/plugins/woocommerce/src/Blocks/AssetsController.php
+++ b/plugins/woocommerce/src/Blocks/AssetsController.php
@@ -136,22 +136,54 @@ final class AssetsController {
array( 'wc-blocks-middleware', 'wc-entities' ),
true
);
- $this->register_deprecated_script_handles();
+
+ if ( is_admin() ) {
+ // Register deprecated script handles for backward compatibility in the admin context.
+ $this->register_deprecated_script_handles();
+ }
}
/**
* Register deprecated script handles for backward compatibility.
*/
private function register_deprecated_script_handles(): void {
- wp_register_script( 'wc-blocks-vendors', false, array(), $this->api->wc_version, true );
- wp_register_script( 'wc-blocks', false, array( 'wc-blocks-vendors' ), $this->api->wc_version, true );
-
- $this->add_deprecated_script_handle_warnings(
- array(
- 'wc-blocks-vendors',
- 'wc-blocks',
- )
+ $script_dependencies = array(
+ 'wc-blocks-vendors' => array(),
+ 'wc-blocks' => array( 'wc-blocks-vendors', 'wc-block-library' ),
);
+ $build_path = WC_ABSPATH . 'assets/client/blocks/';
+ $asset_files = glob( $build_path . '*.asset.php' );
+
+ foreach ( false === $asset_files ? array() : $asset_files as $asset_file ) {
+ $script_name = basename( $asset_file, '.asset.php' );
+
+ if (
+ in_array( $script_name, array( 'wc-block-library', 'wc-blocks' ), true ) ||
+ ! file_exists( $build_path . $script_name . '.js' )
+ ) {
+ continue;
+ }
+
+ // The file comes from WooCommerce's generated assets directory, not user input.
+ // nosemgrep audit.php.lang.security.file.inclusion-arg.
+ $asset_data = require $asset_file;
+
+ if (
+ ! is_array( $asset_data ) ||
+ ! in_array( 'wp-blocks', (array) ( $asset_data['dependencies'] ?? array() ), true )
+ ) {
+ continue;
+ }
+
+ $legacy_handle = 'wc-' . $script_name . '-block';
+ $script_dependencies[ $legacy_handle ] = array( 'wc-blocks' );
+ }
+
+ foreach ( $script_dependencies as $handle => $dependencies ) {
+ wp_register_script( $handle, false, $dependencies, $this->api->wc_version, true );
+ }
+
+ $this->add_deprecated_script_handle_warnings( array_keys( $script_dependencies ) );
}
/**
@@ -163,7 +195,7 @@ final class AssetsController {
foreach ( $handles as $handle ) {
$message = wp_json_encode(
sprintf(
- '[WooCommerce] The "%s" script handle is deprecated and kept for backward compatibility only. See the enqueueable packages documentation for the supported WooCommerce Blocks package handles: https://github.com/woocommerce/woocommerce/tree/trunk/plugins/woocommerce/client/blocks/docs/internal-developers/enqueueable-packages',
+ '[WooCommerce] The "%s" script handle is a deprecated compatibility placeholder and does not load a script. See the enqueueable packages documentation: https://github.com/woocommerce/woocommerce/tree/trunk/plugins/woocommerce/client/blocks/docs/internal-developers/enqueueable-packages',
$handle
)
);