Automattic\WooCommerce\Blocks\BlockTypes\ProductCollection
QueryBuilder::get_filter_by_taxonomy_query
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() 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,
),
),
);
}