Automattic\WooCommerce\Blocks
CoreBreadcrumbsCompatibility::apply_woocommerce_breadcrumb_filters
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() 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;
}