Commit c8b3a0f89da for woocommerce
commit c8b3a0f89daa3035c6caf9d9120c95d1868df4b4
Author: Luigi Teschio <gigitux@gmail.com>
Date: Wed Oct 21 15:32:52 2026 +0200
Fix Interactivity API directive IDs for WordPress 7.2 (#70076)
* Fix deprecated Interactivity API lifecycle directive IDs
* Add changelog for Interactivity API compatibility fix
diff --git a/plugins/woocommerce/changelog/fix-interactivity-api-lifecycle-directive-ids b/plugins/woocommerce/changelog/fix-interactivity-api-lifecycle-directive-ids
new file mode 100644
index 00000000000..47c58d8e24f
--- /dev/null
+++ b/plugins/woocommerce/changelog/fix-interactivity-api-lifecycle-directive-ids
@@ -0,0 +1,4 @@
+Significance: patch
+Type: fix
+
+Restore product galleries, filters, Mini-Cart updates, and product option validation on WordPress 7.2.
diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/AddToCartWithOptions/VariationSelector.php b/plugins/woocommerce/src/Blocks/BlockTypes/AddToCartWithOptions/VariationSelector.php
index 9350db9fb85..4978c68464f 100644
--- a/plugins/woocommerce/src/Blocks/BlockTypes/AddToCartWithOptions/VariationSelector.php
+++ b/plugins/woocommerce/src/Blocks/BlockTypes/AddToCartWithOptions/VariationSelector.php
@@ -37,7 +37,7 @@ class VariationSelector extends AbstractBlock {
if ( $p->next_tag( array( 'class_name' => 'wp-block-woocommerce-add-to-cart-with-options-variation-selector' ) ) ) {
$p->set_attribute( 'data-wp-watch', 'callbacks.setSelectedVariationId' );
- $p->set_attribute( 'data-wp-watch--validate', 'callbacks.validateVariation' );
+ $p->set_attribute( 'data-wp-watch---validate', 'callbacks.validateVariation' );
}
return $p->get_updated_html();
diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/MiniCart.php b/plugins/woocommerce/src/Blocks/BlockTypes/MiniCart.php
index 4013f6261db..626084c89bc 100644
--- a/plugins/woocommerce/src/Blocks/BlockTypes/MiniCart.php
+++ b/plugins/woocommerce/src/Blocks/BlockTypes/MiniCart.php
@@ -406,7 +406,7 @@ class MiniCart extends AbstractBlock {
data-wp-on-document--wc-blocks_added_to_cart---open-drawer="actions.openDrawer"
<?php endif; ?>
data-wp-watch="callbacks.disableScrollingOnBody"
- data-wp-init--mark-as-hydrated="callbacks.markAsHydrated"
+ data-wp-init---mark-as-hydrated="callbacks.markAsHydrated"
<?php // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
<?php echo wp_interactivity_data_wp_context( $context ); ?>
class="<?php echo esc_attr( $wrapper_classes ); ?>"
diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/ProductFilterChips.php b/plugins/woocommerce/src/Blocks/BlockTypes/ProductFilterChips.php
index eff9bfa08cb..ec75e3732b7 100644
--- a/plugins/woocommerce/src/Blocks/BlockTypes/ProductFilterChips.php
+++ b/plugins/woocommerce/src/Blocks/BlockTypes/ProductFilterChips.php
@@ -82,9 +82,9 @@ final class ProductFilterChips extends AbstractBlock {
);
$wrapper_attributes = array(
- 'data-wp-interactive' => 'woocommerce/product-filter-chips',
- 'data-wp-init--colors' => 'callbacks.initColors',
- 'data-wp-context' => (string) wp_json_encode(
+ 'data-wp-interactive' => 'woocommerce/product-filter-chips',
+ 'data-wp-init---colors' => 'callbacks.initColors',
+ 'data-wp-context' => (string) wp_json_encode(
array(
'storeNamespace' => $store_namespace,
'displayLimit' => $display_limit,
@@ -92,7 +92,7 @@ final class ProductFilterChips extends AbstractBlock {
),
JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP
),
- 'class' => esc_attr( $classes ),
+ 'class' => esc_attr( $classes ),
);
if ( ! empty( $style ) ) {
diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/ProductFilters.php b/plugins/woocommerce/src/Blocks/BlockTypes/ProductFilters.php
index fe9ff651d18..92422ce73a5 100644
--- a/plugins/woocommerce/src/Blocks/BlockTypes/ProductFilters.php
+++ b/plugins/woocommerce/src/Blocks/BlockTypes/ProductFilters.php
@@ -233,17 +233,17 @@ CSS;
}
$wrapper_attributes = array(
- 'class' => implode( ' ', $wrapper_classes ),
- 'data-wp-router-region' => $this->generate_navigation_id( $block ),
- 'data-wp-interactive' => $this->get_full_block_name(),
- 'data-wp-init--colors' => 'callbacks.initColors',
- 'data-wp-watch--active-filters' => 'callbacks.syncActiveFiltersWithServer',
- 'data-wp-context' => (string) wp_json_encode( $interactivity_context, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP ),
- 'style' => $this->get_css_variables( $attributes ),
+ 'class' => implode( ' ', $wrapper_classes ),
+ 'data-wp-router-region' => $this->generate_navigation_id( $block ),
+ 'data-wp-interactive' => $this->get_full_block_name(),
+ 'data-wp-init---colors' => 'callbacks.initColors',
+ 'data-wp-watch---active-filters' => 'callbacks.syncActiveFiltersWithServer',
+ 'data-wp-context' => (string) wp_json_encode( $interactivity_context, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP ),
+ 'style' => $this->get_css_variables( $attributes ),
);
if ( $has_overlay ) {
- $wrapper_attributes['data-wp-watch--scrolling'] = 'callbacks.scrollLimit';
+ $wrapper_attributes['data-wp-watch---scrolling'] = 'callbacks.scrollLimit';
$wrapper_attributes['data-wp-on--keyup'] = 'actions.closeOverlayOnEscape';
$wrapper_attributes['data-wp-class--is-overlay-opened'] = 'context.isOverlayOpened';
}
diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/ProductGallery.php b/plugins/woocommerce/src/Blocks/BlockTypes/ProductGallery.php
index c0cf46ca8ef..a5d07c6b883 100644
--- a/plugins/woocommerce/src/Blocks/BlockTypes/ProductGallery.php
+++ b/plugins/woocommerce/src/Blocks/BlockTypes/ProductGallery.php
@@ -314,7 +314,7 @@ class ProductGallery extends AbstractBlock {
);
// Support legacy Add to Cart with Options block.
- $p->set_attribute( 'data-wp-init--watch-changes-on-add-to-cart-form', 'callbacks.watchForChangesOnAddToCartForm' );
+ $p->set_attribute( 'data-wp-init---watch-changes-on-add-to-cart-form', 'callbacks.watchForChangesOnAddToCartForm' );
// Support blockified Add to Cart + Options block.
$p->set_attribute( 'data-wp-watch', 'callbacks.listenToProductDataChanges' );
}
diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/ProductGalleryThumbnails.php b/plugins/woocommerce/src/Blocks/BlockTypes/ProductGalleryThumbnails.php
index c15b0f1871a..40d3cc84cc2 100644
--- a/plugins/woocommerce/src/Blocks/BlockTypes/ProductGalleryThumbnails.php
+++ b/plugins/woocommerce/src/Blocks/BlockTypes/ProductGalleryThumbnails.php
@@ -83,8 +83,8 @@ class ProductGalleryThumbnails extends AbstractBlock {
data-wp-class--wc-block-product-gallery-thumbnails--overflow-right="context.thumbnailsOverflow.right">
<div
class="wc-block-product-gallery-thumbnails__scrollable"
- data-wp-init--init-resize-observer="callbacks.initResizeObserver"
- data-wp-init--hide-ghost-overflow="callbacks.hideGhostOverflow"
+ data-wp-init---init-resize-observer="callbacks.initResizeObserver"
+ data-wp-init---hide-ghost-overflow="callbacks.hideGhostOverflow"
data-wp-on--scroll="actions.onScroll"
aria-label="<?php esc_attr_e( 'Image thumbnails', 'woocommerce' ); ?>"
role="listbox">
diff --git a/plugins/woocommerce/src/Blocks/Utils/ProductGalleryUtils.php b/plugins/woocommerce/src/Blocks/Utils/ProductGalleryUtils.php
index c5600d36051..13878f6fc5c 100644
--- a/plugins/woocommerce/src/Blocks/Utils/ProductGalleryUtils.php
+++ b/plugins/woocommerce/src/Blocks/Utils/ProductGalleryUtils.php
@@ -208,7 +208,7 @@ class ProductGalleryUtils {
if ( 'dialog' === $video_location ) {
unset( $attrs['autoplay'] );
- $attrs['data-wp-init--dialog-video-playback'] = 'callbacks.initDialogVideoPlayback';
+ $attrs['data-wp-init---dialog-video-playback'] = 'callbacks.initDialogVideoPlayback';
}
if ( ! empty( $media['poster_id'] ) && ! empty( $media['poster_src'] ) ) {