Commit 7a4d5d5a9b4 for woocommerce
commit 7a4d5d5a9b403789539f22aa68f49f95b65c6845
Author: Karol Manijak <20098064+kmanijak@users.noreply.github.com>
Date: Wed Jul 22 11:50:01 2026 +0200
Restore Core Breadcrumbs callback compatibility (#66822)
* Restore Core Breadcrumbs callback compatibility
* Simplify Core Breadcrumbs test descriptions
* Add changelog entry for Core Breadcrumbs compatibility
diff --git a/plugins/woocommerce/changelog/fix-66821-core-breadcrumbs-callback-compatibility b/plugins/woocommerce/changelog/fix-66821-core-breadcrumbs-callback-compatibility
new file mode 100644
index 00000000000..e26dc6b045e
--- /dev/null
+++ b/plugins/woocommerce/changelog/fix-66821-core-breadcrumbs-callback-compatibility
@@ -0,0 +1,4 @@
+Significance: patch
+Type: fix
+
+Preserve Core Breadcrumbs callback compatibility for extensions.
diff --git a/plugins/woocommerce/src/Blocks/BlockTypesController.php b/plugins/woocommerce/src/Blocks/BlockTypesController.php
index e148140a453..ec886d56cf6 100644
--- a/plugins/woocommerce/src/Blocks/BlockTypesController.php
+++ b/plugins/woocommerce/src/Blocks/BlockTypesController.php
@@ -63,6 +63,8 @@ final class BlockTypesController {
add_action( 'woocommerce_login_form_end', array( $this, 'redirect_to_field' ) );
add_filter( 'widget_types_to_hide_from_legacy_widget_block', array( $this, 'hide_legacy_widgets_with_block_equivalent' ) );
add_filter( 'register_block_type_args', array( $this, 'enqueue_block_style_for_classic_themes' ), 10, 2 );
+ add_filter( 'block_core_breadcrumbs_post_type_settings', array( $this, 'set_product_breadcrumbs_preferred_taxonomy' ), 10, 3 );
+ add_filter( 'block_core_breadcrumbs_items', array( $this, 'apply_woocommerce_breadcrumb_filters' ), 10, 1 );
}
/**
@@ -581,4 +583,30 @@ final class BlockTypesController {
return $args;
}
+
+ /**
+ * Set the preferred taxonomy and term for product breadcrumbs.
+ *
+ * @internal
+ *
+ * @param array $settings The settings for the breadcrumbs block.
+ * @param string $post_type The post type.
+ * @param int $post_id The current post ID.
+ * @return array The settings for the breadcrumbs block.
+ */
+ public function set_product_breadcrumbs_preferred_taxonomy( $settings, $post_type, $post_id = 0 ) {
+ return Package::container()->get( CoreBreadcrumbsCompatibility::class )->set_product_breadcrumbs_preferred_taxonomy( $settings, $post_type, $post_id );
+ }
+
+ /**
+ * Apply WooCommerce compatibility behavior to Core breadcrumb items.
+ *
+ * @internal
+ *
+ * @param array $items Array of breadcrumb items from Core.
+ * @return array Modified breadcrumb items.
+ */
+ public function apply_woocommerce_breadcrumb_filters( $items ) {
+ return Package::container()->get( CoreBreadcrumbsCompatibility::class )->apply_woocommerce_breadcrumb_filters( $items );
+ }
}
diff --git a/plugins/woocommerce/src/Blocks/Domain/Bootstrap.php b/plugins/woocommerce/src/Blocks/Domain/Bootstrap.php
index 86609eb3c24..bbbad044980 100644
--- a/plugins/woocommerce/src/Blocks/Domain/Bootstrap.php
+++ b/plugins/woocommerce/src/Blocks/Domain/Bootstrap.php
@@ -150,7 +150,6 @@ class Bootstrap {
if ( ( new BlockRegistrationContext() )->should_register() ) {
$this->container->get( BlockPatterns::class );
$this->container->get( BlockTypesController::class );
- $this->container->get( CoreBreadcrumbsCompatibility::class )->init();
}
$this->container->get( ClassicTemplatesCompatibility::class );
$this->container->get( Notices::class )->init();
diff --git a/plugins/woocommerce/tests/php/src/Blocks/CoreBreadcrumbsCompatibilityTest.php b/plugins/woocommerce/tests/php/src/Blocks/CoreBreadcrumbsCompatibilityTest.php
index 655dd0da9ed..71f1d40a819 100644
--- a/plugins/woocommerce/tests/php/src/Blocks/CoreBreadcrumbsCompatibilityTest.php
+++ b/plugins/woocommerce/tests/php/src/Blocks/CoreBreadcrumbsCompatibilityTest.php
@@ -3,6 +3,7 @@ declare( strict_types = 1 );
namespace Automattic\WooCommerce\Tests\Blocks;
+use Automattic\WooCommerce\Blocks\BlockTypesController;
use Automattic\WooCommerce\Blocks\CoreBreadcrumbsCompatibility;
use Automattic\WooCommerce\Blocks\Domain\Bootstrap;
use Automattic\WooCommerce\Blocks\Domain\Package as BlocksPackage;
@@ -183,14 +184,17 @@ class CoreBreadcrumbsCompatibilityTest extends WC_Unit_Test_Case {
);
new Bootstrap( $container );
- $compatibility = $container->get( CoreBreadcrumbsCompatibility::class );
+ $controller = $container->get( BlockTypesController::class );
try {
- $this->assertSame( 10, has_filter( 'block_core_breadcrumbs_post_type_settings', array( $compatibility, 'set_product_breadcrumbs_preferred_taxonomy' ) ), 'Bootstrap should register the product breadcrumb settings filter.' );
- $this->assertSame( 10, has_filter( 'block_core_breadcrumbs_items', array( $compatibility, 'apply_woocommerce_breadcrumb_filters' ) ), 'Bootstrap should register the breadcrumb items filter.' );
+ $this->assertSame( 10, has_filter( 'block_core_breadcrumbs_post_type_settings', array( $controller, 'set_product_breadcrumbs_preferred_taxonomy' ) ), 'Bootstrap should register the product breadcrumb settings filter.' );
+ $this->assertSame( 10, has_filter( 'block_core_breadcrumbs_items', array( $controller, 'apply_woocommerce_breadcrumb_filters' ) ), 'Bootstrap should register the breadcrumb items filter.' );
+ $this->assertSame( array( 'taxonomy' => 'product_cat' ), $controller->set_product_breadcrumbs_preferred_taxonomy( array(), 'product' ), 'BlockTypesController should set the product breadcrumb settings.' );
+ $this->assertSame( array(), $controller->apply_woocommerce_breadcrumb_filters( array() ), 'BlockTypesController should filter the breadcrumb items.' );
+ $this->assertTrue( remove_filter( 'block_core_breadcrumbs_items', array( $controller, 'apply_woocommerce_breadcrumb_filters' ), 10 ), 'The breadcrumb items filter should be removable.' );
} finally {
- remove_filter( 'block_core_breadcrumbs_post_type_settings', array( $compatibility, 'set_product_breadcrumbs_preferred_taxonomy' ), 10 );
- remove_filter( 'block_core_breadcrumbs_items', array( $compatibility, 'apply_woocommerce_breadcrumb_filters' ), 10 );
+ remove_filter( 'block_core_breadcrumbs_post_type_settings', array( $controller, 'set_product_breadcrumbs_preferred_taxonomy' ), 10 );
+ remove_filter( 'block_core_breadcrumbs_items', array( $controller, 'apply_woocommerce_breadcrumb_filters' ), 10 );
}
}