diff --git a/plugins/woocommerce/src/Internal/ProductAttributesLookup/Filterer.php b/plugins/woocommerce/src/Internal/ProductAttributesLookup/Filterer.php index a4d6f97850b..6d16d9061fe 100644 --- a/plugins/woocommerce/src/Internal/ProductAttributesLookup/Filterer.php +++ b/plugins/woocommerce/src/Internal/ProductAttributesLookup/Filterer.php @@ -226,17 +226,15 @@ class Filterer { if ( ! empty( $attributes_to_filter_by ) ) { $and_term_ids = array(); - $or_term_ids = array(); foreach ( $attributes_to_filter_by as $taxonomy => $data ) { + if ( 'and' !== $data['query_type'] ) { + continue; + } $all_terms = get_terms( $taxonomy, array( 'hide_empty' => false ) ); $term_ids_by_slug = wp_list_pluck( $all_terms, 'term_id', 'slug' ); $term_ids_to_filter_by = array_values( array_intersect_key( $term_ids_by_slug, array_flip( $data['terms'] ) ) ); - if ( 'and' === $data['query_type'] ) { - $and_term_ids = array_merge( $and_term_ids, $term_ids_to_filter_by ); - } else { - $or_term_ids = array_merge( $or_term_ids, $term_ids_to_filter_by ); - } + $and_term_ids = array_merge( $and_term_ids, $term_ids_to_filter_by ); } if ( ! empty( $and_term_ids ) ) { @@ -261,17 +259,6 @@ class Filterer { AND term_id in {$term_ids_list} ) temp )"; } - - if ( ! empty( $or_term_ids ) ) { - $term_ids_list = '(' . join( ',', $or_term_ids ) . ')'; - $query['where'] .= " - AND product_or_parent_id IN ( SELECT product_or_parent_id FROM ( - SELECT product_or_parent_id FROM {$this->lookup_table_name} - WHERE term_id in {$term_ids_list} - {$in_stock_clause} - ) temp )"; - - } } else { $query['where'] .= $in_stock_clause; } diff --git a/plugins/woocommerce/tests/php/src/Internal/ProductAttributesLookup/FiltererTest.php b/plugins/woocommerce/tests/php/src/Internal/ProductAttributesLookup/FiltererTest.php index a5ae813f5a2..655b0afe4bd 100644 --- a/plugins/woocommerce/tests/php/src/Internal/ProductAttributesLookup/FiltererTest.php +++ b/plugins/woocommerce/tests/php/src/Internal/ProductAttributesLookup/FiltererTest.php @@ -545,16 +545,7 @@ class FiltererTest extends \WC_Unit_Test_Case { $this->assertEmpty( $filtered_product_ids ); } - /* - * If a variable product defines an attribute value that isn't used by any variation: - * When using the lookup table: that value is not included in the count. - * When not using the lookup table: the value is included in the count since it is part of the parent product. - */ - if ( $using_lookup_table && 'or' === $filter_type && array( 'Green' ) === $attributes ) { - $expected_to_be_included_in_count = false; - } else { - $expected_to_be_included_in_count = 'or' === $filter_type || $expected_to_be_visible; - } + $expected_to_be_included_in_count = 'or' === $filter_type || $expected_to_be_visible; $this->assert_counters( 'Color', $expected_to_be_included_in_count ? array( 'Blue', 'Red' ) : array(), $filter_type ); } @@ -822,16 +813,7 @@ class FiltererTest extends \WC_Unit_Test_Case { $this->assertEmpty( $filtered_product_ids ); } - /* - * If a variable product defines an attribute value that isn't used by any variation: - * When using the lookup table: that value is not included in the count. - * When not using the lookup table: the value is included in the count since it is part of the parent product. - */ - if ( $using_lookup_table && 'or' === $filter_type && array( 'Elastic' ) === $attributes ) { - $expected_to_be_included_in_count = false; - } else { - $expected_to_be_included_in_count = 'or' === $filter_type || $expected_to_be_visible; - } + $expected_to_be_included_in_count = 'or' === $filter_type || $expected_to_be_visible; $this->assert_counters( 'Features', $expected_to_be_included_in_count ? array( 'Washable', 'Ironable' ) : array(), $filter_type ); } @@ -1075,16 +1057,7 @@ class FiltererTest extends \WC_Unit_Test_Case { $this->assertEmpty( $filtered_product_ids ); } - /* - * If a variable product defines an attribute value that isn't used by any variation: - * When using the lookup table: that value is not included in the count. - * When not using the lookup table: the value is included in the count since it is part of the parent product. - */ - if ( $using_lookup_table && 'or' === $filter_type && array( 'Green' ) === $attributes ) { - $expected_counted_attributes = array(); - } else { - $expected_counted_attributes = 'or' === $filter_type || $expected_to_be_visible ? array( 'Blue', 'Red' ) : array(); - } + $expected_counted_attributes = 'or' === $filter_type || $expected_to_be_visible ? array( 'Blue', 'Red' ) : array(); $this->assert_counters( 'Color', $expected_counted_attributes, $filter_type ); } @@ -1208,16 +1181,7 @@ class FiltererTest extends \WC_Unit_Test_Case { $this->assertEmpty( $filtered_product_ids ); } - /* - * If a variable product defines an attribute value that isn't used by any variation: - * When using the lookup table: that value is not included in the count. - * When not using the lookup table: the value is included in the count since it is part of the parent product. - */ - if ( $using_lookup_table && 'or' === $filter_type && array( 'White' ) === $attributes ) { - $expected_to_be_included_in_count = false; - } else { - $expected_to_be_included_in_count = 'or' === $filter_type || $expected_to_be_visible; - } + $expected_to_be_included_in_count = 'or' === $filter_type || $expected_to_be_visible; $this->assert_counters( 'Color', $expected_to_be_included_in_count ? array( 'Blue', 'Red', 'Green' ) : array(), $filter_type ); }