From f24694e48f88781dc7004e947bf0c62ab52b2608 Mon Sep 17 00:00:00 2001 From: Oscar Sanchez S Date: Tue, 20 Jun 2023 19:11:54 -0500 Subject: [PATCH 01/15] Add ep_facet_special_slug_taxonomies filter --- .../Facets/Types/Taxonomy/FacetType.php | 40 +++++++++---------- .../Feature/WooCommerce/WooCommerce.php | 15 +++++++ 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php b/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php index 14805eaaaa..a11eeaae20 100644 --- a/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php +++ b/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php @@ -172,19 +172,19 @@ public function facet_query( $query ) { $tax_query = $query->get( 'tax_query', [] ); - // Account for taxonomies that should be woocommerce attributes, if WC is enabled - $attribute_taxonomies = []; - if ( function_exists( 'wc_attribute_taxonomy_name' ) ) { - $all_attr_taxonomies = wc_get_attribute_taxonomies(); - - foreach ( $all_attr_taxonomies as $attr_taxonomy ) { - $attribute_taxonomies[ $attr_taxonomy->attribute_name ] = wc_attribute_taxonomy_name( $attr_taxonomy->attribute_name ); - } - } + /** + * Filter for treatment special slugs in taxonomies. This is used in case you need to change the default taxonomy slug + * + * @since 4.7.0 + * @hook ep_facet_special_slug_taxonomies + * @param {array} $special_taxonomies Taxonomies with special slugs + * @return {array} $selected_filters Selected filters + */ + $special_taxonomies = apply_filters( 'ep_facet_special_slug_taxonomies', [], $selected_filters ); foreach ( $selected_filters['taxonomies'] as $taxonomy => $filter ) { $tax_query[] = [ - 'taxonomy' => isset( $attribute_taxonomies[ $taxonomy ] ) ? $attribute_taxonomies[ $taxonomy ] : $taxonomy, + 'taxonomy' => $special_taxonomies[ $taxonomy ] ?? $taxonomy, 'field' => 'slug', 'terms' => array_keys( $filter['terms'] ), 'operator' => ( 'any' === $settings['match_type'] ) ? 'or' : 'and', @@ -218,20 +218,20 @@ public function add_query_filters( $filters ) { return; } - // Account for taxonomies that should be woocommerce attributes, if WC is enabled - $attribute_taxonomies = []; - if ( function_exists( 'wc_attribute_taxonomy_name' ) ) { - $all_attr_taxonomies = wc_get_attribute_taxonomies(); - - foreach ( $all_attr_taxonomies as $attr_taxonomy ) { - $attribute_taxonomies[ $attr_taxonomy->attribute_name ] = wc_attribute_taxonomy_name( $attr_taxonomy->attribute_name ); - } - } + /** + * Filter for treatment special slugs in taxonomies. This is used in case you need to change the default taxonomy slug + * + * @since 4.7.0 + * @hook ep_facet_special_slug_taxonomies + * @param {array} $special_taxonomies Taxonomies with special slugs + * @return {array} $selected_filters Selected filters + */ + $special_taxonomies = apply_filters( 'ep_facet_special_slug_taxonomies', [], $selected_filters ); $match_type = $feature->get_match_type(); foreach ( $selected_filters['taxonomies'] as $taxonomy => $filter ) { - $taxonomy_slug = $attribute_taxonomies[ $taxonomy ] ?? $taxonomy; + $taxonomy_slug = $special_taxonomies[ $taxonomy ] ?? $taxonomy; if ( 'any' === $match_type ) { $filters[] = [ diff --git a/includes/classes/Feature/WooCommerce/WooCommerce.php b/includes/classes/Feature/WooCommerce/WooCommerce.php index 5bbfe41df8..4d3177a5be 100644 --- a/includes/classes/Feature/WooCommerce/WooCommerce.php +++ b/includes/classes/Feature/WooCommerce/WooCommerce.php @@ -881,6 +881,7 @@ public function setup() { add_filter( 'ep_weighting_default_post_type_weights', [ $this, 'add_product_default_post_type_weights' ], 10, 2 ); add_filter( 'ep_prepare_meta_data', [ $this, 'add_variations_skus_meta' ], 10, 2 ); add_filter( 'request', [ $this, 'admin_product_list_request_query' ], 9 ); + add_filter( 'ep_facet_special_slug_taxonomies', [ $this, 'add_taxonomy_attributes' ] ); // Custom product ordering add_action( 'ep_admin_notices', [ $this, 'maybe_display_notice_about_product_ordering' ] ); @@ -1422,4 +1423,18 @@ public function maybe_disable_decaying( $is_decaying_enabled, $settings, $args ) return false; } + /** + * Add taxonomies that should be woocommerce attributes. + * + * @param array $attribute_taxonomies Attribute taxonomies. + * @return array $attribute_taxonomies Attribute taxonomies. + */ + public function add_taxonomy_attributes( $attribute_taxonomies ) { + $all_attr_taxonomies = wc_get_attribute_taxonomies(); + + foreach ( $all_attr_taxonomies as $attr_taxonomy ) { + $attribute_taxonomies[ $attr_taxonomy->attribute_name ] = wc_attribute_taxonomy_name( $attr_taxonomy->attribute_name ); + } + return $attribute_taxonomies; + } } From 48bc5850fa2cc674536fd212931a6313d4fe7759 Mon Sep 17 00:00:00 2001 From: Oscar Sanchez S Date: Thu, 22 Jun 2023 10:51:50 -0500 Subject: [PATCH 02/15] Add filter test --- tests/php/features/TestFacet.php | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/php/features/TestFacet.php b/tests/php/features/TestFacet.php index bcf9551424..417f5a15ab 100644 --- a/tests/php/features/TestFacet.php +++ b/tests/php/features/TestFacet.php @@ -357,6 +357,27 @@ public function testGetAllowedQueryArgs() { $this->assertEqualsCanonicalizing( array_merge( $default_allowed_args, [ 'test' ] ), $facet_feature->get_allowed_query_args() ); } + /** + * Test the ep_facet_special_slug_taxonomies filter runs. + * + * @return void + */ + public function testEpFacetSpecialSlugTaxonomiesFilter() { + add_filter( + 'ep_facet_special_slug_taxonomies', + function( $special_slug_taxonomies, $selected_filters ) { + foreach ( $selected_filters['taxonomies'] as $taxonomy => $filter ) { + $special_slug_taxonomies[ $taxonomy ] = 'testmyfilter'; + } + return $special_slug_taxonomies; + }, + 10, + 2 + ); + + $this->assertGreaterThanOrEqual( 1, did_filter( 'ep_facet_special_slug_taxonomies' ) ); + } + /** * Utilitary function for the testGetSelected test. * From 7e1f333bc3455c4647191af651fb16c2ea639b0b Mon Sep 17 00:00:00 2001 From: Oscar Sanchez S Date: Thu, 22 Jun 2023 22:06:06 -0500 Subject: [PATCH 03/15] Move test to correct class --- .../Facets/Types/Taxonomy/FacetType.php | 8 +++--- .../Feature/WooCommerce/WooCommerce.php | 2 +- tests/php/features/TestFacet.php | 21 -------------- tests/php/features/TestFacetTypeTaxonomy.php | 28 +++++++++++++++++++ 4 files changed, 33 insertions(+), 26 deletions(-) diff --git a/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php b/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php index a11eeaae20..49b0b255d2 100644 --- a/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php +++ b/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php @@ -176,11 +176,11 @@ public function facet_query( $query ) { * Filter for treatment special slugs in taxonomies. This is used in case you need to change the default taxonomy slug * * @since 4.7.0 - * @hook ep_facet_special_slug_taxonomies + * @hook ep_facet_tax_special_slug_taxonomies * @param {array} $special_taxonomies Taxonomies with special slugs * @return {array} $selected_filters Selected filters */ - $special_taxonomies = apply_filters( 'ep_facet_special_slug_taxonomies', [], $selected_filters ); + $special_taxonomies = apply_filters( 'ep_facet_tax_special_slug_taxonomies', [], $selected_filters ); foreach ( $selected_filters['taxonomies'] as $taxonomy => $filter ) { $tax_query[] = [ @@ -222,11 +222,11 @@ public function add_query_filters( $filters ) { * Filter for treatment special slugs in taxonomies. This is used in case you need to change the default taxonomy slug * * @since 4.7.0 - * @hook ep_facet_special_slug_taxonomies + * @hook ep_facet_tax_special_slug_taxonomies * @param {array} $special_taxonomies Taxonomies with special slugs * @return {array} $selected_filters Selected filters */ - $special_taxonomies = apply_filters( 'ep_facet_special_slug_taxonomies', [], $selected_filters ); + $special_taxonomies = apply_filters( 'ep_facet_tax_special_slug_taxonomies', [], $selected_filters ); $match_type = $feature->get_match_type(); diff --git a/includes/classes/Feature/WooCommerce/WooCommerce.php b/includes/classes/Feature/WooCommerce/WooCommerce.php index 4d3177a5be..ffbf3732c6 100644 --- a/includes/classes/Feature/WooCommerce/WooCommerce.php +++ b/includes/classes/Feature/WooCommerce/WooCommerce.php @@ -881,7 +881,7 @@ public function setup() { add_filter( 'ep_weighting_default_post_type_weights', [ $this, 'add_product_default_post_type_weights' ], 10, 2 ); add_filter( 'ep_prepare_meta_data', [ $this, 'add_variations_skus_meta' ], 10, 2 ); add_filter( 'request', [ $this, 'admin_product_list_request_query' ], 9 ); - add_filter( 'ep_facet_special_slug_taxonomies', [ $this, 'add_taxonomy_attributes' ] ); + add_filter( 'ep_facet_tax_special_slug_taxonomies', [ $this, 'add_taxonomy_attributes' ] ); // Custom product ordering add_action( 'ep_admin_notices', [ $this, 'maybe_display_notice_about_product_ordering' ] ); diff --git a/tests/php/features/TestFacet.php b/tests/php/features/TestFacet.php index 417f5a15ab..bcf9551424 100644 --- a/tests/php/features/TestFacet.php +++ b/tests/php/features/TestFacet.php @@ -357,27 +357,6 @@ public function testGetAllowedQueryArgs() { $this->assertEqualsCanonicalizing( array_merge( $default_allowed_args, [ 'test' ] ), $facet_feature->get_allowed_query_args() ); } - /** - * Test the ep_facet_special_slug_taxonomies filter runs. - * - * @return void - */ - public function testEpFacetSpecialSlugTaxonomiesFilter() { - add_filter( - 'ep_facet_special_slug_taxonomies', - function( $special_slug_taxonomies, $selected_filters ) { - foreach ( $selected_filters['taxonomies'] as $taxonomy => $filter ) { - $special_slug_taxonomies[ $taxonomy ] = 'testmyfilter'; - } - return $special_slug_taxonomies; - }, - 10, - 2 - ); - - $this->assertGreaterThanOrEqual( 1, did_filter( 'ep_facet_special_slug_taxonomies' ) ); - } - /** * Utilitary function for the testGetSelected test. * diff --git a/tests/php/features/TestFacetTypeTaxonomy.php b/tests/php/features/TestFacetTypeTaxonomy.php index 0faded4ebc..12004e024c 100644 --- a/tests/php/features/TestFacetTypeTaxonomy.php +++ b/tests/php/features/TestFacetTypeTaxonomy.php @@ -322,4 +322,32 @@ public function testAddQueryParams() { $this->assertSame( $new_query_params, $expected_query_params ); } + + /** + * Test the ep_facet_tax_special_slug_taxonomies filter runs. + * + * @return void + */ + public function testEpFacetSpecialSlugTaxonomiesFilter() { + add_filter( + 'ep_facet_tax_special_slug_taxonomies', + function( $special_slug_taxonomies, $selected_filters ) { + foreach ( $selected_filters['taxonomies'] as $taxonomy => $filter ) { + $special_slug_taxonomies[ $taxonomy ] = 'testmyfilter'; + } + return $special_slug_taxonomies; + }, + 10, + 2 + ); + + $facet_feature = Features::factory()->get_registered_feature( 'facets' ); + $facet_type = $facet_feature->types['taxonomy']; + + parse_str( 'ep_filter_taxonomy=dolor,amet', $_GET ); + + $facet_type->add_query_filters( [] ); + + $this->assertGreaterThanOrEqual( 1, did_filter( 'ep_facet_tax_special_slug_taxonomies' ) ); + } } From 5470e6d00479445dbceca960c0a0311d4f926c77 Mon Sep 17 00:00:00 2001 From: Oscar Sanchez S Date: Thu, 20 Jul 2023 19:59:09 -0500 Subject: [PATCH 04/15] Add since tag --- .../classes/Feature/Facets/Types/Taxonomy/FacetType.php | 9 +-------- tests/php/features/TestFacetTypeTaxonomy.php | 1 + 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php b/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php index 49b0b255d2..5e44290879 100644 --- a/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php +++ b/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php @@ -172,14 +172,7 @@ public function facet_query( $query ) { $tax_query = $query->get( 'tax_query', [] ); - /** - * Filter for treatment special slugs in taxonomies. This is used in case you need to change the default taxonomy slug - * - * @since 4.7.0 - * @hook ep_facet_tax_special_slug_taxonomies - * @param {array} $special_taxonomies Taxonomies with special slugs - * @return {array} $selected_filters Selected filters - */ + /** This filter is documented below */ $special_taxonomies = apply_filters( 'ep_facet_tax_special_slug_taxonomies', [], $selected_filters ); foreach ( $selected_filters['taxonomies'] as $taxonomy => $filter ) { diff --git a/tests/php/features/TestFacetTypeTaxonomy.php b/tests/php/features/TestFacetTypeTaxonomy.php index 12004e024c..1a7b2a1f23 100644 --- a/tests/php/features/TestFacetTypeTaxonomy.php +++ b/tests/php/features/TestFacetTypeTaxonomy.php @@ -326,6 +326,7 @@ public function testAddQueryParams() { /** * Test the ep_facet_tax_special_slug_taxonomies filter runs. * + * @since 4.7.0 * @return void */ public function testEpFacetSpecialSlugTaxonomiesFilter() { From 7d019769c1b1b52dffe439ed89706ea276dc643c Mon Sep 17 00:00:00 2001 From: Oscar Sanchez S Date: Thu, 20 Jul 2023 20:05:08 -0500 Subject: [PATCH 05/15] Resolve merge conflict --- .../classes/Feature/WooCommerce/WooCommerce.php | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/includes/classes/Feature/WooCommerce/WooCommerce.php b/includes/classes/Feature/WooCommerce/WooCommerce.php index 05c1fefc8f..345b23222d 100644 --- a/includes/classes/Feature/WooCommerce/WooCommerce.php +++ b/includes/classes/Feature/WooCommerce/WooCommerce.php @@ -96,19 +96,6 @@ public function setup() { add_filter( 'woocommerce_layered_nav_query_post_ids', [ $this, 'convert_post_object_to_id' ], 10, 4 ); add_filter( 'woocommerce_unfiltered_product_ids', [ $this, 'convert_post_object_to_id' ], 10, 4 ); add_action( 'ep_wp_query_search_cached_posts', [ $this, 'disallow_duplicated_query' ], 10, 2 ); - add_action( 'parse_query', [ $this, 'maybe_hook_woocommerce_search_fields' ], 1 ); - add_action( 'parse_query', [ $this, 'search_order' ], 11 ); - add_filter( 'ep_term_suggest_post_type', [ $this, 'suggest_wc_add_post_type' ] ); - add_filter( 'ep_facet_include_taxonomies', [ $this, 'add_product_attributes' ] ); - add_filter( 'ep_weighting_fields_for_post_type', [ $this, 'add_product_attributes_to_weighting' ], 10, 2 ); - add_filter( 'ep_weighting_default_post_type_weights', [ $this, 'add_product_default_post_type_weights' ], 10, 2 ); - add_filter( 'ep_prepare_meta_data', [ $this, 'add_variations_skus_meta' ], 10, 2 ); - add_filter( 'request', [ $this, 'admin_product_list_request_query' ], 9 ); - add_filter( 'ep_facet_tax_special_slug_taxonomies', [ $this, 'add_taxonomy_attributes' ] ); - - // Custom product ordering - add_action( 'ep_admin_notices', [ $this, 'maybe_display_notice_about_product_ordering' ] ); - add_action( 'woocommerce_after_product_ordering', [ $this, 'action_sync_on_woocommerce_sort_single' ], 10, 2 ); // Orders Autosuggest feature. if ( $this->is_orders_autosuggest_enabled() ) { From b8850981fad8e1941e6e0a8d65aadc88a3d49bd0 Mon Sep 17 00:00:00 2001 From: Oscar Sanchez S Date: Thu, 20 Jul 2023 20:07:02 -0500 Subject: [PATCH 06/15] Add ep_facet_special_slug_taxonomies hook back --- includes/classes/Feature/WooCommerce/WooCommerce.php | 1 + 1 file changed, 1 insertion(+) diff --git a/includes/classes/Feature/WooCommerce/WooCommerce.php b/includes/classes/Feature/WooCommerce/WooCommerce.php index 345b23222d..67df97c476 100644 --- a/includes/classes/Feature/WooCommerce/WooCommerce.php +++ b/includes/classes/Feature/WooCommerce/WooCommerce.php @@ -96,6 +96,7 @@ public function setup() { add_filter( 'woocommerce_layered_nav_query_post_ids', [ $this, 'convert_post_object_to_id' ], 10, 4 ); add_filter( 'woocommerce_unfiltered_product_ids', [ $this, 'convert_post_object_to_id' ], 10, 4 ); add_action( 'ep_wp_query_search_cached_posts', [ $this, 'disallow_duplicated_query' ], 10, 2 ); + add_filter( 'ep_facet_special_slug_taxonomies', [ $this, 'add_taxonomy_attributes' ] ); // Orders Autosuggest feature. if ( $this->is_orders_autosuggest_enabled() ) { From bedb7d20c5555a5ef6bf628726aa2b94688c6cb4 Mon Sep 17 00:00:00 2001 From: Oscar Sanchez S Date: Wed, 26 Jul 2023 18:34:47 -0500 Subject: [PATCH 07/15] Add add_taxonomy_attributes filter --- .../features/WooCommerce/TestWooCommerce.php | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/php/features/WooCommerce/TestWooCommerce.php b/tests/php/features/WooCommerce/TestWooCommerce.php index 886f90ba68..2c6ad913d3 100644 --- a/tests/php/features/WooCommerce/TestWooCommerce.php +++ b/tests/php/features/WooCommerce/TestWooCommerce.php @@ -354,4 +354,29 @@ public function testEPWoocommerceAdminProductsListSearchFields() { [ 'post_title', 'post_content' ] ); } + + /** + * Test add_taxonomy_attributes. + * + * @since 4.7.0 + */ + public function add_taxonomy_attributes() { + $test_attribute_taxonomies = [ + 'my_dummy_attribute' => 'my_dummy_attribute_name' + ]; + + $attribute_taxonomies = $test_attribute_taxonomies; + + $all_attr_taxonomies = wc_get_attribute_taxonomies(); + + foreach ( $all_attr_taxonomies as $attr_taxonomy ) { + $test_attribute_taxonomies[ $attr_taxonomy->attribute_name ] = wc_attribute_taxonomy_name( $attr_taxonomy->attribute_name ); + } + + $woocommerce_feature = ElasticPress\Features::factory()->get_registered_feature( 'woocommerce' ); + + $add_taxonomy_attributes = $woocommerce_feature->add_taxonomy_attributes( $attribute_taxonomies ); + + $this->assertEquals( $test_attribute_taxonomies, $add_taxonomy_attributes ); + } } From 71ac3f371bfc535397e4be6bb52d46ba2c952a84 Mon Sep 17 00:00:00 2001 From: Oscar Sanchez S Date: Thu, 27 Jul 2023 17:16:43 -0500 Subject: [PATCH 08/15] Add filter array testing to test_ep_facet_special_slug_taxonomies_filter test --- .../Feature/WooCommerce/WooCommerce.php | 2 +- tests/php/features/TestFacetTypeTaxonomy.php | 21 +++++++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/includes/classes/Feature/WooCommerce/WooCommerce.php b/includes/classes/Feature/WooCommerce/WooCommerce.php index 67df97c476..f45c8dbb6b 100644 --- a/includes/classes/Feature/WooCommerce/WooCommerce.php +++ b/includes/classes/Feature/WooCommerce/WooCommerce.php @@ -96,7 +96,7 @@ public function setup() { add_filter( 'woocommerce_layered_nav_query_post_ids', [ $this, 'convert_post_object_to_id' ], 10, 4 ); add_filter( 'woocommerce_unfiltered_product_ids', [ $this, 'convert_post_object_to_id' ], 10, 4 ); add_action( 'ep_wp_query_search_cached_posts', [ $this, 'disallow_duplicated_query' ], 10, 2 ); - add_filter( 'ep_facet_special_slug_taxonomies', [ $this, 'add_taxonomy_attributes' ] ); + add_filter( 'ep_facet_tax_special_slug_taxonomies', [ $this, 'add_taxonomy_attributes' ] ); // Orders Autosuggest feature. if ( $this->is_orders_autosuggest_enabled() ) { diff --git a/tests/php/features/TestFacetTypeTaxonomy.php b/tests/php/features/TestFacetTypeTaxonomy.php index 1a7b2a1f23..05637e89af 100644 --- a/tests/php/features/TestFacetTypeTaxonomy.php +++ b/tests/php/features/TestFacetTypeTaxonomy.php @@ -329,26 +329,29 @@ public function testAddQueryParams() { * @since 4.7.0 * @return void */ - public function testEpFacetSpecialSlugTaxonomiesFilter() { + public function test_ep_facet_special_slug_taxonomies_filter() { add_filter( 'ep_facet_tax_special_slug_taxonomies', - function( $special_slug_taxonomies, $selected_filters ) { - foreach ( $selected_filters['taxonomies'] as $taxonomy => $filter ) { - $special_slug_taxonomies[ $taxonomy ] = 'testmyfilter'; - } + function( $special_slug_taxonomies ) { + $special_slug_taxonomies['testmyfilter'] = 'testmyfilterchangedfilter'; return $special_slug_taxonomies; }, - 10, - 2 + 99999, ); $facet_feature = Features::factory()->get_registered_feature( 'facets' ); $facet_type = $facet_feature->types['taxonomy']; - parse_str( 'ep_filter_taxonomy=dolor,amet', $_GET ); + parse_str( 'ep_filter_taxonomy=dolor,amet&ep_filter_testmyfilter=dolor,amet', $_GET ); + + $query_filters = $facet_type->add_query_filters( [] ); - $facet_type->add_query_filters( [] ); + $sample_test[0]['term'] = ['terms.taxonomy.slug' => 'dolor']; + $sample_test[1]['term'] = ['terms.taxonomy.slug' => 'amet']; + $sample_test[2]['term'] = ['terms.testmyfilterchangedfilter.slug' => 'dolor']; + $sample_test[3]['term'] = ['terms.testmyfilterchangedfilter.slug' => 'amet']; + $this->assertEquals( $sample_test, $query_filters ); $this->assertGreaterThanOrEqual( 1, did_filter( 'ep_facet_tax_special_slug_taxonomies' ) ); } } From 3a6101714c0273f120a9aee60c229a10c19225aa Mon Sep 17 00:00:00 2001 From: Oscar Sanchez S Date: Thu, 27 Jul 2023 17:20:42 -0500 Subject: [PATCH 09/15] Add a return to filter docblock --- .../Feature/Facets/Types/Taxonomy/FacetType.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php b/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php index 5e44290879..6844e52d91 100644 --- a/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php +++ b/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php @@ -207,23 +207,27 @@ public function add_query_filters( $filters ) { } $selected_filters = $feature->get_selected(); + + if ( empty( $selected_filters ) || empty( $selected_filters[ $this->get_filter_type() ] ) ) { return; } /** - * Filter for treatment special slugs in taxonomies. This is used in case you need to change the default taxonomy slug + * Filter for treatment special slugs in taxonomies. This is used in case you need to change the default taxonomy slug. * * @since 4.7.0 - * @hook ep_facet_tax_special_slug_taxonomies - * @param {array} $special_taxonomies Taxonomies with special slugs - * @return {array} $selected_filters Selected filters + * @hook ep_facet_tax_special_slug_taxonomies. + * @param {array} $special_taxonomies Taxonomies with special slugs. + * @param {array} $selected_filters Selected filters. + * @return {array} New taxonomies with special slugs. */ $special_taxonomies = apply_filters( 'ep_facet_tax_special_slug_taxonomies', [], $selected_filters ); $match_type = $feature->get_match_type(); foreach ( $selected_filters['taxonomies'] as $taxonomy => $filter ) { + $taxonomy_slug = $special_taxonomies[ $taxonomy ] ?? $taxonomy; if ( 'any' === $match_type ) { From 52215b906d541276900fbe22d11bcdd3528b08d6 Mon Sep 17 00:00:00 2001 From: Oscar Sanchez S Date: Thu, 27 Jul 2023 17:21:10 -0500 Subject: [PATCH 10/15] Specify types on add_taxonomy_attributes method --- includes/classes/Feature/WooCommerce/WooCommerce.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/includes/classes/Feature/WooCommerce/WooCommerce.php b/includes/classes/Feature/WooCommerce/WooCommerce.php index f45c8dbb6b..14b1a6ace3 100644 --- a/includes/classes/Feature/WooCommerce/WooCommerce.php +++ b/includes/classes/Feature/WooCommerce/WooCommerce.php @@ -653,10 +653,11 @@ public function maybe_disable_decaying( $is_decaying_enabled, $settings, $args ) /** * Add taxonomies that should be woocommerce attributes. * + * @since 4.7.0 * @param array $attribute_taxonomies Attribute taxonomies. * @return array $attribute_taxonomies Attribute taxonomies. */ - public function add_taxonomy_attributes( $attribute_taxonomies ) { + public function add_taxonomy_attributes( array $attribute_taxonomies ) : array { $all_attr_taxonomies = wc_get_attribute_taxonomies(); foreach ( $all_attr_taxonomies as $attr_taxonomy ) { From 65bf0facfa6a1f79d0c76c7eba7b184c9705bb2e Mon Sep 17 00:00:00 2001 From: Oscar Sanchez S Date: Thu, 27 Jul 2023 17:22:10 -0500 Subject: [PATCH 11/15] Add group tag to test --- tests/php/features/WooCommerce/TestWooCommerce.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/php/features/WooCommerce/TestWooCommerce.php b/tests/php/features/WooCommerce/TestWooCommerce.php index 2c6ad913d3..40a850eebf 100644 --- a/tests/php/features/WooCommerce/TestWooCommerce.php +++ b/tests/php/features/WooCommerce/TestWooCommerce.php @@ -359,6 +359,7 @@ public function testEPWoocommerceAdminProductsListSearchFields() { * Test add_taxonomy_attributes. * * @since 4.7.0 + * @group woocommerce */ public function add_taxonomy_attributes() { $test_attribute_taxonomies = [ From e08203a9ec738ea236d4eec0d0662767e430fa14 Mon Sep 17 00:00:00 2001 From: Oscar Sanchez S Date: Thu, 27 Jul 2023 18:59:28 -0500 Subject: [PATCH 12/15] Check for pa attributes in test_add_taxonomy_attributes --- .../features/WooCommerce/TestWooCommerce.php | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/tests/php/features/WooCommerce/TestWooCommerce.php b/tests/php/features/WooCommerce/TestWooCommerce.php index 40a850eebf..f27e7d4f96 100644 --- a/tests/php/features/WooCommerce/TestWooCommerce.php +++ b/tests/php/features/WooCommerce/TestWooCommerce.php @@ -361,23 +361,35 @@ public function testEPWoocommerceAdminProductsListSearchFields() { * @since 4.7.0 * @group woocommerce */ - public function add_taxonomy_attributes() { - $test_attribute_taxonomies = [ - 'my_dummy_attribute' => 'my_dummy_attribute_name' - ]; + public function test_add_taxonomy_attributes() { + $attributes = wc_get_attribute_taxonomies(); + + $slugs = wp_list_pluck( $attributes, 'attribute_name' ); - $attribute_taxonomies = $test_attribute_taxonomies; + if ( ! in_array( 'my_color', $slugs ) ) { - $all_attr_taxonomies = wc_get_attribute_taxonomies(); + $args = array( + 'slug' => 'my_color', + 'name' => 'My color', + 'type' => 'select', + 'orderby' => 'menu_order', + 'has_archives' => false, + ); - foreach ( $all_attr_taxonomies as $attr_taxonomy ) { - $test_attribute_taxonomies[ $attr_taxonomy->attribute_name ] = wc_attribute_taxonomy_name( $attr_taxonomy->attribute_name ); + wc_create_attribute( $args ); } - $woocommerce_feature = ElasticPress\Features::factory()->get_registered_feature( 'woocommerce' ); + $facet_feature = ElasticPress\Features::factory()->get_registered_feature( 'facets' ); + $facet_type = $facet_feature->types['taxonomy']; + + parse_str( 'ep_filter_taxonomy=dolor,amet&ep_filter_my_color=red', $_GET ); + + $query_filters = $facet_type->add_query_filters( [] ); - $add_taxonomy_attributes = $woocommerce_feature->add_taxonomy_attributes( $attribute_taxonomies ); + $sample_test[0]['term'] = ['terms.taxonomy.slug' => 'dolor']; + $sample_test[1]['term'] = ['terms.taxonomy.slug' => 'amet']; + $sample_test[2]['term'] = ['terms.pa_my_color.slug' => 'red']; - $this->assertEquals( $test_attribute_taxonomies, $add_taxonomy_attributes ); + $this->assertEquals( $sample_test, $query_filters ); } } From ff418471a2294120f64f51b6fa04aa1665b700f0 Mon Sep 17 00:00:00 2001 From: Oscar Sanchez S Date: Thu, 27 Jul 2023 19:07:53 -0500 Subject: [PATCH 13/15] PHP lint fixes --- .../Facets/Types/Taxonomy/FacetType.php | 1 - tests/php/features/TestFacetTypeTaxonomy.php | 10 +++++----- .../features/WooCommerce/TestWooCommerce.php | 18 +++++++++--------- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php b/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php index 6844e52d91..43605b0ebb 100644 --- a/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php +++ b/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php @@ -208,7 +208,6 @@ public function add_query_filters( $filters ) { $selected_filters = $feature->get_selected(); - if ( empty( $selected_filters ) || empty( $selected_filters[ $this->get_filter_type() ] ) ) { return; } diff --git a/tests/php/features/TestFacetTypeTaxonomy.php b/tests/php/features/TestFacetTypeTaxonomy.php index 05637e89af..a62e8a92a8 100644 --- a/tests/php/features/TestFacetTypeTaxonomy.php +++ b/tests/php/features/TestFacetTypeTaxonomy.php @@ -336,7 +336,7 @@ function( $special_slug_taxonomies ) { $special_slug_taxonomies['testmyfilter'] = 'testmyfilterchangedfilter'; return $special_slug_taxonomies; }, - 99999, + 99999 ); $facet_feature = Features::factory()->get_registered_feature( 'facets' ); @@ -346,10 +346,10 @@ function( $special_slug_taxonomies ) { $query_filters = $facet_type->add_query_filters( [] ); - $sample_test[0]['term'] = ['terms.taxonomy.slug' => 'dolor']; - $sample_test[1]['term'] = ['terms.taxonomy.slug' => 'amet']; - $sample_test[2]['term'] = ['terms.testmyfilterchangedfilter.slug' => 'dolor']; - $sample_test[3]['term'] = ['terms.testmyfilterchangedfilter.slug' => 'amet']; + $sample_test[0]['term']['terms.taxonomy.slug'] = 'dolor'; + $sample_test[1]['term']['terms.taxonomy.slug'] = 'amet'; + $sample_test[2]['term']['terms.testmyfilterchangedfilter.slug'] = 'dolor'; + $sample_test[3]['term']['terms.testmyfilterchangedfilter.slug'] = 'amet'; $this->assertEquals( $sample_test, $query_filters ); $this->assertGreaterThanOrEqual( 1, did_filter( 'ep_facet_tax_special_slug_taxonomies' ) ); diff --git a/tests/php/features/WooCommerce/TestWooCommerce.php b/tests/php/features/WooCommerce/TestWooCommerce.php index f27e7d4f96..33bbb6cb23 100644 --- a/tests/php/features/WooCommerce/TestWooCommerce.php +++ b/tests/php/features/WooCommerce/TestWooCommerce.php @@ -366,14 +366,14 @@ public function test_add_taxonomy_attributes() { $slugs = wp_list_pluck( $attributes, 'attribute_name' ); - if ( ! in_array( 'my_color', $slugs ) ) { + if ( ! in_array( 'my_color', $slugs, true ) ) { $args = array( - 'slug' => 'my_color', - 'name' => 'My color', - 'type' => 'select', - 'orderby' => 'menu_order', - 'has_archives' => false, + 'slug' => 'my_color', + 'name' => 'My color', + 'type' => 'select', + 'orderby' => 'menu_order', + 'has_archives' => false, ); wc_create_attribute( $args ); @@ -386,9 +386,9 @@ public function test_add_taxonomy_attributes() { $query_filters = $facet_type->add_query_filters( [] ); - $sample_test[0]['term'] = ['terms.taxonomy.slug' => 'dolor']; - $sample_test[1]['term'] = ['terms.taxonomy.slug' => 'amet']; - $sample_test[2]['term'] = ['terms.pa_my_color.slug' => 'red']; + $sample_test[0]['term']['terms.taxonomy.slug'] = 'dolor'; + $sample_test[1]['term']['terms.taxonomy.slug'] = 'amet'; + $sample_test[2]['term']['terms.pa_my_color.slug'] = 'red'; $this->assertEquals( $sample_test, $query_filters ); } From 87bc282b3e7c9660ebbdae87410f399bb5014ae3 Mon Sep 17 00:00:00 2001 From: Felipe Elia Date: Fri, 28 Jul 2023 13:08:16 -0300 Subject: [PATCH 14/15] Adjust `@hook` parameter --- includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php b/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php index 43605b0ebb..05e917149f 100644 --- a/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php +++ b/includes/classes/Feature/Facets/Types/Taxonomy/FacetType.php @@ -216,7 +216,7 @@ public function add_query_filters( $filters ) { * Filter for treatment special slugs in taxonomies. This is used in case you need to change the default taxonomy slug. * * @since 4.7.0 - * @hook ep_facet_tax_special_slug_taxonomies. + * @hook ep_facet_tax_special_slug_taxonomies * @param {array} $special_taxonomies Taxonomies with special slugs. * @param {array} $selected_filters Selected filters. * @return {array} New taxonomies with special slugs. From 538c7091eccefe37f838014280b1d8e55773483e Mon Sep 17 00:00:00 2001 From: Felipe Elia Date: Fri, 28 Jul 2023 13:14:09 -0300 Subject: [PATCH 15/15] Move new code to product-related files --- .../classes/Feature/WooCommerce/Products.php | 17 ++++++++- .../Feature/WooCommerce/WooCommerce.php | 17 --------- .../features/WooCommerce/TestWooCommerce.php | 38 ------------------- .../WooCommerce/TestWooCommerceProduct.php | 38 +++++++++++++++++++ 4 files changed, 54 insertions(+), 56 deletions(-) diff --git a/includes/classes/Feature/WooCommerce/Products.php b/includes/classes/Feature/WooCommerce/Products.php index 08ffda2396..69e66759aa 100644 --- a/includes/classes/Feature/WooCommerce/Products.php +++ b/includes/classes/Feature/WooCommerce/Products.php @@ -49,8 +49,8 @@ public function setup() { add_filter( 'ep_weighting_default_post_type_weights', [ $this, 'add_product_default_post_type_weights' ], 10, 2 ); add_filter( 'ep_prepare_meta_data', [ $this, 'add_variations_skus_meta' ], 10, 2 ); add_filter( 'request', [ $this, 'admin_product_list_request_query' ], 9 ); - add_action( 'pre_get_posts', [ $this, 'translate_args' ], 11, 1 ); + add_filter( 'ep_facet_tax_special_slug_taxonomies', [ $this, 'add_taxonomy_attributes' ] ); // Custom product ordering add_action( 'ep_admin_notices', [ $this, 'maybe_display_notice_about_product_ordering' ] ); @@ -995,4 +995,19 @@ public function get_orderby_meta_mapping( $meta_key ) : string { return 'date'; } + + /** + * Add taxonomies that should be woocommerce attributes. + * + * @param array $attribute_taxonomies Attribute taxonomies. + * @return array $attribute_taxonomies Attribute taxonomies. + */ + public function add_taxonomy_attributes( array $attribute_taxonomies ) : array { + $all_attr_taxonomies = wc_get_attribute_taxonomies(); + + foreach ( $all_attr_taxonomies as $attr_taxonomy ) { + $attribute_taxonomies[ $attr_taxonomy->attribute_name ] = wc_attribute_taxonomy_name( $attr_taxonomy->attribute_name ); + } + return $attribute_taxonomies; + } } diff --git a/includes/classes/Feature/WooCommerce/WooCommerce.php b/includes/classes/Feature/WooCommerce/WooCommerce.php index 14b1a6ace3..25cb8868ea 100644 --- a/includes/classes/Feature/WooCommerce/WooCommerce.php +++ b/includes/classes/Feature/WooCommerce/WooCommerce.php @@ -96,7 +96,6 @@ public function setup() { add_filter( 'woocommerce_layered_nav_query_post_ids', [ $this, 'convert_post_object_to_id' ], 10, 4 ); add_filter( 'woocommerce_unfiltered_product_ids', [ $this, 'convert_post_object_to_id' ], 10, 4 ); add_action( 'ep_wp_query_search_cached_posts', [ $this, 'disallow_duplicated_query' ], 10, 2 ); - add_filter( 'ep_facet_tax_special_slug_taxonomies', [ $this, 'add_taxonomy_attributes' ] ); // Orders Autosuggest feature. if ( $this->is_orders_autosuggest_enabled() ) { @@ -649,20 +648,4 @@ public function maybe_disable_decaying( $is_decaying_enabled, $settings, $args ) _deprecated_function( __METHOD__, '4.7.0', "\ElasticPress\Features::factory()->get_registered_feature( 'woocommerce' )->products->maybe_disable_decaying()" ); return $this->products->maybe_disable_decaying( $is_decaying_enabled, $settings, $args ); } - - /** - * Add taxonomies that should be woocommerce attributes. - * - * @since 4.7.0 - * @param array $attribute_taxonomies Attribute taxonomies. - * @return array $attribute_taxonomies Attribute taxonomies. - */ - public function add_taxonomy_attributes( array $attribute_taxonomies ) : array { - $all_attr_taxonomies = wc_get_attribute_taxonomies(); - - foreach ( $all_attr_taxonomies as $attr_taxonomy ) { - $attribute_taxonomies[ $attr_taxonomy->attribute_name ] = wc_attribute_taxonomy_name( $attr_taxonomy->attribute_name ); - } - return $attribute_taxonomies; - } } diff --git a/tests/php/features/WooCommerce/TestWooCommerce.php b/tests/php/features/WooCommerce/TestWooCommerce.php index 33bbb6cb23..886f90ba68 100644 --- a/tests/php/features/WooCommerce/TestWooCommerce.php +++ b/tests/php/features/WooCommerce/TestWooCommerce.php @@ -354,42 +354,4 @@ public function testEPWoocommerceAdminProductsListSearchFields() { [ 'post_title', 'post_content' ] ); } - - /** - * Test add_taxonomy_attributes. - * - * @since 4.7.0 - * @group woocommerce - */ - public function test_add_taxonomy_attributes() { - $attributes = wc_get_attribute_taxonomies(); - - $slugs = wp_list_pluck( $attributes, 'attribute_name' ); - - if ( ! in_array( 'my_color', $slugs, true ) ) { - - $args = array( - 'slug' => 'my_color', - 'name' => 'My color', - 'type' => 'select', - 'orderby' => 'menu_order', - 'has_archives' => false, - ); - - wc_create_attribute( $args ); - } - - $facet_feature = ElasticPress\Features::factory()->get_registered_feature( 'facets' ); - $facet_type = $facet_feature->types['taxonomy']; - - parse_str( 'ep_filter_taxonomy=dolor,amet&ep_filter_my_color=red', $_GET ); - - $query_filters = $facet_type->add_query_filters( [] ); - - $sample_test[0]['term']['terms.taxonomy.slug'] = 'dolor'; - $sample_test[1]['term']['terms.taxonomy.slug'] = 'amet'; - $sample_test[2]['term']['terms.pa_my_color.slug'] = 'red'; - - $this->assertEquals( $sample_test, $query_filters ); - } } diff --git a/tests/php/features/WooCommerce/TestWooCommerceProduct.php b/tests/php/features/WooCommerce/TestWooCommerceProduct.php index 826dd8eeb7..a3ac64568b 100644 --- a/tests/php/features/WooCommerce/TestWooCommerceProduct.php +++ b/tests/php/features/WooCommerce/TestWooCommerceProduct.php @@ -1076,4 +1076,42 @@ public function testOrderbyMetaMappingFilter() { $this->assertSame( $this->products->get_orderby_meta_mapping( 'custom_parameter' ), 'meta.custom_parameter.long' ); } + + /** + * Test add_taxonomy_attributes. + * + * @group woocommerce + * @group woocommerce-products + */ + public function test_add_taxonomy_attributes() { + $attributes = wc_get_attribute_taxonomies(); + + $slugs = wp_list_pluck( $attributes, 'attribute_name' ); + + if ( ! in_array( 'my_color', $slugs, true ) ) { + + $args = array( + 'slug' => 'my_color', + 'name' => 'My color', + 'type' => 'select', + 'orderby' => 'menu_order', + 'has_archives' => false, + ); + + wc_create_attribute( $args ); + } + + $facet_feature = ElasticPress\Features::factory()->get_registered_feature( 'facets' ); + $facet_type = $facet_feature->types['taxonomy']; + + parse_str( 'ep_filter_taxonomy=dolor,amet&ep_filter_my_color=red', $_GET ); + + $query_filters = $facet_type->add_query_filters( [] ); + + $sample_test[0]['term']['terms.taxonomy.slug'] = 'dolor'; + $sample_test[1]['term']['terms.taxonomy.slug'] = 'amet'; + $sample_test[2]['term']['terms.pa_my_color.slug'] = 'red'; + + $this->assertEquals( $sample_test, $query_filters ); + } }