Automattic\WooCommerce\Blocks\BlockTypes

ProductFilterAttribute::register_active_filters_data()publicWC 1.0

Register the active filters data.

Method of the class: ProductFilterAttribute{}

No Hooks.

Return

Array. Active filters data.

Usage

$ProductFilterAttribute = new ProductFilterAttribute();
$ProductFilterAttribute->register_active_filters_data( $data, $params );
$data(array) (required)
The active filters data.
$params(array) (required)
The query param parsed from the URL.

ProductFilterAttribute::register_active_filters_data() code WC 9.5.1

public function register_active_filters_data( $data, $params ) {
	$product_attributes_map = array_reduce(
		wc_get_attribute_taxonomies(),
		function ( $acc, $attribute_object ) {
			$acc[ $attribute_object->attribute_name ] = $attribute_object->attribute_label;
			return $acc;
		},
		array()
	);

	$active_product_attributes = array_reduce(
		array_keys( $params ),
		function ( $acc, $attribute ) {
			if ( strpos( $attribute, 'filter_' ) === 0 ) {
				$acc[] = str_replace( 'filter_', '', $attribute );
			}
			return $acc;
		},
		array()
	);

	$active_product_attributes = array_filter(
		$active_product_attributes,
		function ( $item ) use ( $product_attributes_map ) {
			return in_array( $item, array_keys( $product_attributes_map ), true );
		}
	);

	$action_namespace = $this->get_full_block_name();

	foreach ( $active_product_attributes as $product_attribute ) {
		$terms = explode( ',', get_query_var( "filter_{$product_attribute}" ) );

		// Get attribute term by slug.
		$terms = array_map(
			function ( $term ) use ( $product_attribute, $action_namespace ) {
				$term_object = get_term_by( 'slug', $term, "pa_{$product_attribute}" );
				return array(
					'title'      => $term_object->name,
					'attributes' => array(
						'value'             => $term,
						'data-wc-on--click' => "$action_namespace::actions.toggleFilter",
						'data-wc-context'   => "$action_namespace::" . wp_json_encode(
							array(
								'attributeSlug' => $product_attribute,
								'queryType'     => get_query_var( "query_type_{$product_attribute}" ),
							),
							JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP
						),
					),
				);
			},
			$terms
		);

		$data[ $product_attribute ] = array(
			'type'  => $product_attributes_map[ $product_attribute ],
			'items' => $terms,
		);
	}

	return $data;
}