Automattic\WooCommerce\Blocks\BlockTypes\ProductCollection

QueryBuilder::get_filter_by_taxonomy_queryprivateWC 10.6.0

Return a query that filters products by taxonomy terms.

Method of the class: QueryBuilder{}

No Hooks.

Returns

Array.

Usage

// private - for code of main (parent) class only
$result = $this->get_filter_by_taxonomy_query();

Changelog

Since 10.6.0 Introduced.

QueryBuilder::get_filter_by_taxonomy_query() code WC 10.8.1

private function get_filter_by_taxonomy_query() {

	$container       = wc_get_container();
	$params_handler  = $container->get( \Automattic\WooCommerce\Internal\ProductFilters\Params::class );
	$taxonomy_params = $params_handler->get_param( 'taxonomy' );

	if ( empty( $taxonomy_params ) ) {
		return array();
	}

	$tax_queries = array();

	foreach ( $taxonomy_params as $taxonomy_slug => $param_key ) {
		$param_value = get_query_var( $param_key );

		// Adding is_string check to avoid invalid query parameters for the taxonomy.
		if ( ! is_string( $param_value ) || empty( $param_value ) ) {
			continue;
		}

		// Define $term_values by exploding the string.
		$term_values = explode( ',', $param_value );

		// Sanitize and filter (removes empty strings).
		$term_slugs = array_values( array_filter( array_map( 'sanitize_title', $term_values ) ) );

		if ( empty( $term_slugs ) ) {
			continue;
		}

		$tax_queries[] = array(
			'taxonomy' => $taxonomy_slug,
			'field'    => 'slug',
			'terms'    => $term_slugs,
			'operator' => 'IN',
		);
	}

	if ( empty( $tax_queries ) ) {
		return array();
	}

	return array(
		// phpcs:ignore WordPress.DB.SlowDBQuery
		'tax_query' => array(
			array(
				'relation' => 'AND',
				...$tax_queries,
			),
		),
	);
}