Automattic\WooCommerce\Blocks\BlockTypes

ProductFilterTaxonomy::prepare_selected_filterspublicWC 1.0

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() 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;
}