Automattic\WooCommerce\Internal\ProductAttributesLookup
Filterer::get_filtered_term_product_counts()
Count products within certain terms, taking the main WP query into consideration, for the WC_Widget_Layered_Nav widget.
This query allows counts to be generated based on the viewed products, not all products.
Method of the class: Filterer{}
Hooks from the method
Return
Array
.
Usage
$Filterer = new Filterer(); $Filterer->get_filtered_term_product_counts( $term_ids, $taxonomy, $query_type );
- $term_ids(array) (required)
- Term IDs.
- $taxonomy(string) (required)
- Taxonomy.
- $query_type(string) (required)
- Query Type.
Filterer::get_filtered_term_product_counts() Filterer::get filtered term product counts code WC 9.5.1
public function get_filtered_term_product_counts( $term_ids, $taxonomy, $query_type ) { global $wpdb; $use_lookup_table = $this->filtering_via_lookup_table_is_active(); $tax_query = \WC_Query::get_main_tax_query(); $meta_query = \WC_Query::get_main_meta_query(); if ( 'or' === $query_type ) { foreach ( $tax_query as $key => $query ) { if ( is_array( $query ) && $taxonomy === $query['taxonomy'] ) { unset( $tax_query[ $key ] ); } } } $meta_query = new \WP_Meta_Query( $meta_query ); $tax_query = new \WP_Tax_Query( $tax_query ); if ( $use_lookup_table ) { $query = $this->get_product_counts_query_using_lookup_table( $tax_query, $meta_query, $taxonomy, $term_ids ); } else { $query = $this->get_product_counts_query_not_using_lookup_table( $tax_query, $meta_query, $term_ids ); } $query = apply_filters( 'woocommerce_get_filtered_term_product_counts_query', $query ); $query_sql = implode( ' ', $query ); // We have a query - let's see if cached results of this query already exist. $query_hash = md5( $query_sql ); // Maybe store a transient of the count values. $cache = apply_filters( 'woocommerce_layered_nav_count_maybe_cache', true ); if ( true === $cache ) { $cached_counts = (array) get_transient( 'wc_layered_nav_counts_' . sanitize_title( $taxonomy ) ); } else { $cached_counts = array(); } if ( ! isset( $cached_counts[ $query_hash ] ) ) { // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared $results = $wpdb->get_results( $query_sql, ARRAY_A ); $counts = array_map( 'absint', wp_list_pluck( $results, 'term_count', 'term_count_id' ) ); $cached_counts[ $query_hash ] = $counts; if ( true === $cache ) { set_transient( 'wc_layered_nav_counts_' . sanitize_title( $taxonomy ), $cached_counts, DAY_IN_SECONDS ); } } return array_map( 'absint', (array) $cached_counts[ $query_hash ] ); }