Automattic\WooCommerce\StoreApi\Utilities

ProductQueryFilters::get_product_by_filtered_terms()publicWC 1.0

Gets product by filtered terms.

Method of the class: ProductQueryFilters{}

No Hooks.

Return

Array. Product IDs.

Usage

$ProductQueryFilters = new ProductQueryFilters();
$ProductQueryFilters->get_product_by_filtered_terms( $taxonomy, $term_ids, $query_type );
$taxonomy(string)
Taxonomy name.
Default: ''
$term_ids(array)
Term IDs.
Default: array()
$query_type(string)
or | and.
Default: 'or'

Changelog

Since TBD

ProductQueryFilters::get_product_by_filtered_terms() code WC 8.7.0

public function get_product_by_filtered_terms( $taxonomy = '', $term_ids = array(), $query_type = 'or' ) {
	global $wpdb;

	$term_count = count( $term_ids );
	$results    = array();
	$term_ids   = implode( ',', array_map( 'intval', $term_ids ) );

	if ( 'or' === $query_type ) {
		$results = $wpdb->get_col(
		// phpcs:disable WordPress.DB.PreparedSQLPlaceholders.UnquotedComplexPlaceholder
			$wpdb->prepare(
				"
				SELECT DISTINCT `product_or_parent_id`
				FROM {$wpdb->prefix}wc_product_attributes_lookup
				WHERE `taxonomy` = %s
				AND `term_id` IN (%1s)
				",
				$taxonomy,
				$term_ids
			)
		// phpcs:enable
		);
	}

	if ( 'and' === $query_type ) {
		$results = $wpdb->get_col(
		// phpcs:disable WordPress.DB.PreparedSQLPlaceholders.UnquotedComplexPlaceholder
			$wpdb->prepare(
				"
				SELECT DISTINCT `product_or_parent_id`
				FROM {$wpdb->prefix}wc_product_attributes_lookup
				WHERE `taxonomy` = %s
				AND `term_id` IN (%1s)
				GROUP BY `product_or_parent_id`
				HAVING COUNT( DISTINCT `term_id` ) >= %d
				",
				$taxonomy,
				$term_ids,
				$term_count
			)
		// phpcs:enable
		);
	}

	return $results;
}