Commit 2cec884690 for woocommerce

commit 2cec884690f0c0391ab5db582ac43eb57c4cafc5
Author: Karol Manijak <20098064+kmanijak@users.noreply.github.com>
Date:   Thu Jan 22 09:10:38 2026 +0100

    Filter Breadcrumbs final crumbs list in core block (#62770)

    * Filter Breadcrumbs final crumbs list

    * Fix lint and PHPStan

    * Add changelog

    * Fix the incorrect field name

    * Bring back number of argument to 2 for another filter

    * Update incorrect comment entry

diff --git a/plugins/woocommerce/changelog/add-breadcrumbs-filter-crumbs b/plugins/woocommerce/changelog/add-breadcrumbs-filter-crumbs
new file mode 100644
index 0000000000..fc7a5a302a
--- /dev/null
+++ b/plugins/woocommerce/changelog/add-breadcrumbs-filter-crumbs
@@ -0,0 +1,4 @@
+Significance: minor
+Type: add
+
+Breadcrumbs: Filter final list of crumbs in core block
diff --git a/plugins/woocommerce/src/Blocks/BlockTypesController.php b/plugins/woocommerce/src/Blocks/BlockTypesController.php
index c7750bd2fa..0216302863 100644
--- a/plugins/woocommerce/src/Blocks/BlockTypesController.php
+++ b/plugins/woocommerce/src/Blocks/BlockTypesController.php
@@ -64,6 +64,7 @@ final class BlockTypesController {
 		add_action( 'woocommerce_delete_product_transients', array( $this, 'delete_product_transients' ) );
 		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 );
 	}

 	/**
@@ -731,4 +732,52 @@ final class BlockTypesController {

 		return $settings;
 	}
+
+	/**
+	 * Apply WooCommerce breadcrumb filters to Core breadcrumbs block items.
+	 *
+	 * This bridges the Core breadcrumbs block with WooCommerce's legacy breadcrumb filters,
+	 * ensuring backward compatibility for sites that have customized breadcrumbs using
+	 * the `woocommerce_get_breadcrumb` filter.
+	 *
+	 * @param array $items Array of breadcrumb items from Core.
+	 * @return array Modified breadcrumb items.
+	 *
+	 * @internal
+	 */
+	public function apply_woocommerce_breadcrumb_filters( $items ) {
+		// Convert Core format to WooCommerce format.
+		// Core: array( 'url' => '...', 'label' => '...' )
+		// Woo: array( 'label', 'url' ).
+		$wc_crumbs = array_map(
+			function ( $item ) {
+				return array(
+					$item['label'] ?? '',
+					$item['url'] ?? '',
+				);
+			},
+			$items
+		);
+
+		/**
+		 * Filters the breadcrumb trail array.
+		 *
+		 * @since 2.3.0
+		 *
+		 * @param array         $crumbs The breadcrumb trail.
+		 * @param \WC_Breadcrumb|null $breadcrumb The breadcrumb object (null when called from Core block).
+		 */
+		$wc_crumbs = apply_filters( 'woocommerce_get_breadcrumb', $wc_crumbs, null );
+
+		// Convert back to Core format.
+		return array_map(
+			function ( $crumb ) {
+				return array(
+					'label' => $crumb[0] ?? '',
+					'url'   => $crumb[1] ?? '',
+				);
+			},
+			$wc_crumbs
+		);
+	}
 }