Automattic\WooCommerce\StoreApi\Utilities
ProductQueryFilters::get_attribute_counts
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() 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;
}