Automattic\WooCommerce\Blocks

CoreBreadcrumbsCompatibility::apply_woocommerce_breadcrumb_filters │ public │ WC 1.0

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

Method of the class: CoreBreadcrumbsCompatibility{}

Hooks from the method

Returns

array. Modified breadcrumb items.

Usage

$CoreBreadcrumbsCompatibility = new CoreBreadcrumbsCompatibility();
$CoreBreadcrumbsCompatibility->apply_woocommerce_breadcrumb_filters( $items );
$items(array) (required)
Array of breadcrumb items from Core.

CoreBreadcrumbsCompatibility::apply_woocommerce_breadcrumb_filters() code WC 11.1.2

public function apply_woocommerce_breadcrumb_filters( $items ) {
	if ( ! is_array( $items ) ) {
		return $items;
	}

	$items = $this->apply_woocommerce_core_breadcrumb_adjustments( $items );

	if ( ! has_filter( 'woocommerce_get_breadcrumb' ) ) {
		return $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 );

	$core_items = array();

	foreach ( $wc_crumbs as $index => $crumb ) {
		$item  = isset( $items[ $index ] ) && is_array( $items[ $index ] ) ? $items[ $index ] : array();
		$label = is_array( $crumb ) ? ( $crumb[0] ?? '' ) : '';
		$url   = is_array( $crumb ) ? ( $crumb[1] ?? '' ) : '';

		$item['label'] = $label;

		if ( $url ) {
			$item['url'] = $url;
		} else {
			unset( $item['url'] );
		}

		$core_items[] = $item;
	}

	return $core_items;
}