Automattic\WooCommerce\Blocks\BlockTypes
ProductFilterTaxonomy::prepare_selected_filters
Prepare the active filter items.
Method of the class: ProductFilterTaxonomy{}
No Hooks.
Returns
Array. Active filters items.
Usage
$ProductFilterTaxonomy = new ProductFilterTaxonomy(); $ProductFilterTaxonomy->prepare_selected_filters( $items, $params );
- $items(array) (required)
- The active filter items.
- $params(array) (required)
- The query param parsed from the URL.
ProductFilterTaxonomy::prepare_selected_filters() ProductFilterTaxonomy::prepare selected filters code WC 10.3.6
public function prepare_selected_filters( $items, $params ) {
$container = wc_get_container();
$params_handler = $container->get( \Automattic\WooCommerce\Internal\ProductFilters\Params::class );
// Use centralized parameter mapping to avoid hardcoding URL parameter formats.
$taxonomy_params = $params_handler->get_param( 'taxonomy' );
$active_taxonomies = array();
$all_term_slugs = array();
foreach ( $taxonomy_params as $taxonomy_slug => $param_key ) {
if ( ! empty( $params[ $param_key ] ) && is_string( $params[ $param_key ] ) ) {
$term_slugs = array_map( 'sanitize_title', explode( ',', $params[ $param_key ] ) );
$active_taxonomies[ $taxonomy_slug ] = $term_slugs;
$all_term_slugs = array_merge( $all_term_slugs, $term_slugs );
}
}
if ( empty( $active_taxonomies ) ) {
return $items;
}
// Single query for all taxonomies and terms to avoid N+1 query problem.
$terms = get_terms(
array(
'taxonomy' => array_keys( $active_taxonomies ),
'slug' => array_unique( $all_term_slugs ),
'hide_empty' => false,
)
);
if ( is_wp_error( $terms ) || empty( $terms ) ) {
return $items;
}
foreach ( $terms as $term ) {
$taxonomy_object = get_taxonomy( $term->taxonomy );
if ( $taxonomy_object ) {
$items[] = array(
'type' => 'taxonomy/' . $term->taxonomy,
'value' => $term->slug,
'activeLabel' => $taxonomy_object->labels->singular_name . ': ' . $term->name,
);
}
}
return $items;
}