Automattic\WooCommerce\StoreApi\Utilities

ProductQueryFilters::get_attribute_countspublicWC 1.0

Get attribute counts for the current products.

Метод класса: ProductQueryFilters{}

Хуков нет.

Возвращает

Массив. termId=>count pairs.

Использование

$ProductQueryFilters = new ProductQueryFilters();
$ProductQueryFilters->get_attribute_counts( $request, $attributes );
$request(WP_REST_Request) (обязательный)
The request object.
$attributes(массив)
Attributes to count, either names or ids.
По умолчанию: []

Код ProductQueryFilters::get_attribute_counts() WC 11.0.1

public function get_attribute_counts( $request, $attributes = [] ) {
	// Remove paging and sorting params from the request.
	$request->set_param( 'page', null );
	$request->set_param( 'per_page', null );
	$request->set_param( 'order', null );
	$request->set_param( 'orderby', null );

	// Convert request to query_vars for FilterData.
	$product_query = new ProductQuery();
	$query_vars    = $product_query->prepare_objects_query( $request );

	if ( count( $attributes ) === count( array_filter( $attributes, 'is_numeric' ) ) ) {
		$attributes = array_map( 'wc_attribute_taxonomy_name_by_id', wp_parse_id_list( $attributes ) );
	}

	// Use FilterData with ProductQuery as QueryClausesGenerator. This shares the cached,
	// invalidation-aware filter-data path used by get_taxonomy_counts() and the product filter blocks.
	$container = wc_get_container();

	$filter_data_provider = $container->get( \Automattic\WooCommerce\Internal\ProductFilters\FilterDataProvider::class );
	$filter_data          = $filter_data_provider->with( $product_query );

	$all_counts = array();

	// Get counts for each attribute taxonomy individually so each is cached separately.
	foreach ( $attributes as $attribute ) {
		$taxonomy = wc_sanitize_taxonomy_name( $attribute );
		if ( ! $taxonomy ) {
			continue;
		}
		$counts = $filter_data->get_attribute_counts( $query_vars, $taxonomy );
		// Each attribute taxonomy owns a disjoint set of term IDs, so the union operator safely
		// merges the term_id => count pairs without colliding or overwriting between taxonomies.
		$all_counts = $all_counts + $counts;
	}

	return $all_counts;
}