Automattic\WooCommerce\Blocks
CoreBreadcrumbsCompatibility::set_product_breadcrumbs_preferred_taxonomy
Set the preferred taxonomy and term for the breadcrumbs block on the product post type.
This method mimics the behavior of WC_Breadcrumb::add_crumbs_single() to ensure consistent breadcrumb term selection between WooCommerce's legacy breadcrumbs and the Core breadcrumbs block.
Method of the class: CoreBreadcrumbsCompatibility{}
Hooks from the method
Returns
array. The settings for the breadcrumbs block.
Usage
$CoreBreadcrumbsCompatibility = new CoreBreadcrumbsCompatibility(); $CoreBreadcrumbsCompatibility->set_product_breadcrumbs_preferred_taxonomy( $settings, $post_type, $post_id );
- $settings(array) (required)
- The settings for the breadcrumbs block.
- $post_type(string) (required)
- The post type.
- $post_id(int)
- The current post ID.
CoreBreadcrumbsCompatibility::set_product_breadcrumbs_preferred_taxonomy() CoreBreadcrumbsCompatibility::set product breadcrumbs preferred taxonomy code WC 11.1.2
public function set_product_breadcrumbs_preferred_taxonomy( $settings, $post_type, $post_id = 0 ) {
if ( ! is_array( $settings ) || 'product' !== $post_type ) {
return $settings;
}
$settings['taxonomy'] = 'product_cat';
$post_id = (int) $post_id;
if ( ! $post_id ) {
return $settings;
}
$terms = wc_get_product_terms(
$post_id,
'product_cat',
/**
* Filters the arguments used to fetch product terms for breadcrumbs.
*
* @since 9.5.0
*
* @param array $args Array of arguments for `wc_get_product_terms()`.
*/
apply_filters(
'woocommerce_breadcrumb_product_terms_args',
array(
'orderby' => 'parent',
'order' => 'DESC',
)
)
);
if ( empty( $terms ) || is_wp_error( $terms ) ) {
return $settings;
}
/**
* Filters the main term used in product breadcrumbs.
*
* @since 9.5.0
*
* @param \WP_Term $main_term The main term to be used in breadcrumbs.
* @param \WP_Term[] $terms Array of all product category terms.
*/
$main_term = apply_filters( 'woocommerce_breadcrumb_main_term', $terms[0], $terms );
if ( $main_term instanceof \WP_Term ) {
$settings['term'] = $main_term->slug;
}
return $settings;
}