Skip to content
This repository has been archived by the owner on Feb 23, 2024. It is now read-only.

Product Query: allow adding more arguments by applying a filter. #6069

Closed
wants to merge 2 commits into from

Conversation

cpapazoglou
Copy link
Contributor

@cpapazoglou cpapazoglou commented Mar 21, 2022

While working on 12894-gh-Automattic/woocommerce.com I have noticed that there aren't any hooks allowing us to extend what arguments can be passed to the wc/store/products/ API. This PR aims at allowing code outside of this repo to hook into $query_args before it gets passed to WP_Query();

https://github.com/Automattic/woocommerce.com/blob/476e2a09a2b6e9ff175b9230054ce6ad6dd871a6/plugins/woo-gutenberg-products-block/src/StoreApi/Utilities/ProductQuery.php#L242-L243

Accessibility

Other Checks

  • I've updated this doc for any feature flags or experimental interfaces implemented in this pull request.
  • I tagged two reviewers because this PR makes queries to the database or I think it might have some security impact.

Screenshots

Testing

Automated Tests

  • Changes in this PR are covered by Automated Tests.
    • Unit tests
    • E2E tests

Manual Testing

How to test the changes in this Pull Request:

Perhaps it will be easier testing this 12894-gh-Automattic/woocommerce.com

User Facing Testing

These are steps for user testing (where "user" is someone interacting with this change that is not editing any code).

  • Same as above, or
  • See steps below.

Performance Impact

Changelog

Adds store_api_product_query_args filter to allow extending the $query_args before it gets passed to WP_Query();

@github-actions
Copy link
Contributor

github-actions bot commented Mar 21, 2022

Size Change: +45 B (0%)

Total Size: 862 kB

Filename Size Change
build/mini-cart.js 6.37 kB +45 B (+1%)
ℹ️ View Unchanged
Filename Size
build/active-filters-frontend.js 5.92 kB
build/active-filters.js 6.96 kB
build/all-products-frontend.js 18.2 kB
build/all-products.js 33.9 kB
build/all-reviews.js 8.02 kB
build/attribute-filter-frontend.js 16.8 kB
build/attribute-filter.js 13.1 kB
build/blocks-checkout.js 17.4 kB
build/cart-blocks/accepted-payment-methods-frontend.js 1.16 kB
build/cart-blocks/checkout-button-frontend.js 1.15 kB
build/cart-blocks/empty-cart-frontend.js 346 B
build/cart-blocks/express-payment-frontend.js 5.19 kB
build/cart-blocks/filled-cart-frontend.js 759 B
build/cart-blocks/items-frontend.js 300 B
build/cart-blocks/line-items-frontend.js 5.5 kB
build/cart-blocks/order-summary-frontend.js 8.87 kB
build/cart-blocks/totals-frontend.js 320 B
build/cart-frontend.js 45 kB
build/cart.js 43.6 kB
build/checkout-blocks/actions-frontend.js 1.41 kB
build/checkout-blocks/billing-address--checkout-blocks/shipping-address-frontend.js 4.12 kB
build/checkout-blocks/billing-address-frontend.js 891 B
build/checkout-blocks/contact-information-frontend.js 2.83 kB
build/checkout-blocks/express-payment-frontend.js 5.49 kB
build/checkout-blocks/fields-frontend.js 344 B
build/checkout-blocks/order-note-frontend.js 1.52 kB
build/checkout-blocks/order-summary-frontend.js 11.3 kB
build/checkout-blocks/payment-frontend.js 7.77 kB
build/checkout-blocks/shipping-address-frontend.js 998 B
build/checkout-blocks/shipping-methods-frontend.js 4.74 kB
build/checkout-blocks/terms-frontend.js 1.22 kB
build/checkout-blocks/totals-frontend.js 325 B
build/checkout-frontend.js 47.2 kB
build/checkout.js 44.7 kB
build/featured-category.js 8.61 kB
build/featured-product.js 9.71 kB
build/handpicked-products.js 7.09 kB
build/legacy-template.js 2.19 kB
build/mini-cart-component-frontend.js 16.5 kB
build/mini-cart-contents-block/empty-cart-frontend.js 329 B
build/mini-cart-contents-block/filled-cart-frontend.js 230 B
build/mini-cart-contents-block/footer--mini-cart-contents-block/products-table-frontend.js 5.32 kB
build/mini-cart-contents-block/footer-frontend.js 5.67 kB
build/mini-cart-contents-block/items-frontend.js 226 B
build/mini-cart-contents-block/products-table-frontend.js 5.36 kB
build/mini-cart-contents-block/shopping-button-frontend.js 287 B
build/mini-cart-contents-block/title-frontend.js 367 B
build/mini-cart-contents.js 23.6 kB
build/mini-cart-frontend.js 1.72 kB
build/price-filter-frontend.js 12.1 kB
build/price-filter.js 8.49 kB
build/price-format.js 1.19 kB
build/product-add-to-cart--product-button--product-category-list--product-image--product-price--product-r--a0326d00.js 222 B
build/product-add-to-cart--product-button--product-image--product-title.js 2.64 kB
build/product-add-to-cart-frontend.js 7 kB
build/product-add-to-cart.js 7.47 kB
build/product-best-sellers.js 7.37 kB
build/product-button--product-category-list--product-image--product-price--product-rating--product-sale-b--e17c7c01.js 500 B
build/product-button-frontend.js 2.08 kB
build/product-button.js 2.29 kB
build/product-categories.js 3.17 kB
build/product-category-list-frontend.js 923 B
build/product-category-list.js 499 B
build/product-category.js 8.48 kB
build/product-image-frontend.js 1.85 kB
build/product-image.js 1.08 kB
build/product-new.js 7.67 kB
build/product-on-sale.js 7.98 kB
build/product-price-frontend.js 1.93 kB
build/product-price.js 1.51 kB
build/product-rating-frontend.js 1.15 kB
build/product-rating.js 730 B
build/product-sale-badge-frontend.js 1.09 kB
build/product-sale-badge.js 680 B
build/product-search.js 2.18 kB
build/product-sku-frontend.js 380 B
build/product-sku.js 382 B
build/product-stock-indicator-frontend.js 1.03 kB
build/product-stock-indicator.js 620 B
build/product-summary-frontend.js 1.33 kB
build/product-summary.js 918 B
build/product-tag-list-frontend.js 917 B
build/product-tag-list.js 495 B
build/product-tag.js 7.81 kB
build/product-title-frontend.js 1.28 kB
build/product-title.js 901 B
build/product-top-rated.js 7.9 kB
build/products-by-attribute.js 8.39 kB
build/reviews-by-category.js 11.4 kB
build/reviews-by-product.js 12.6 kB
build/reviews-frontend.js 6.97 kB
build/single-product-frontend.js 21.6 kB
build/single-product.js 10 kB
build/stock-filter-frontend.js 6.5 kB
build/stock-filter.js 6.57 kB
build/vendors--cart-blocks/line-items--cart-blocks/order-summary--checkout-blocks/order-summary--checkout--6efbf40e-frontend.js 5.26 kB
build/vendors--cart-blocks/line-items--checkout-blocks/order-summary--mini-cart-contents-block/products-table-frontend.js 3.14 kB
build/vendors--cart-blocks/order-summary--checkout-blocks/billing-address--checkout-blocks/order-summary---4f3822fa-frontend.js 19.3 kB
build/vendors--cart-blocks/order-summary--checkout-blocks/billing-address--checkout-blocks/order-summary---eb4d2cec-frontend.js 4.74 kB
build/vendors--mini-cart-contents-block/footer--mini-cart-contents-block/products-table-frontend.js 7.35 kB
build/vendors--product-add-to-cart-frontend.js 7.54 kB
build/wc-blocks-data.js 9.83 kB
build/wc-blocks-editor-style-rtl.css 4.84 kB
build/wc-blocks-editor-style.css 4.84 kB
build/wc-blocks-google-analytics.js 1.56 kB
build/wc-blocks-middleware.js 930 B
build/wc-blocks-registry.js 2.7 kB
build/wc-blocks-shared-context.js 1.52 kB
build/wc-blocks-shared-hocs.js 1.14 kB
build/wc-blocks-style-rtl.css 22.2 kB
build/wc-blocks-style.css 22.2 kB
build/wc-blocks-vendors-style-rtl.css 1.28 kB
build/wc-blocks-vendors-style.css 1.28 kB
build/wc-blocks-vendors.js 70.7 kB
build/wc-blocks.js 2.62 kB
build/wc-payment-method-bacs.js 816 B
build/wc-payment-method-cheque.js 811 B
build/wc-payment-method-cod.js 909 B
build/wc-payment-method-paypal.js 837 B
build/wc-settings.js 2.61 kB

compressed-size-action

@cpapazoglou cpapazoglou marked this pull request as ready for review March 22, 2022 10:45
@tjcafferkey tjcafferkey requested review from mikejolley and a team March 22, 2022 13:49
@mikejolley mikejolley requested review from senadir and removed request for mikejolley March 25, 2022 12:08
@senadir
Copy link
Member

senadir commented Mar 26, 2022

Hey @cpapazoglou! We don't use filters for Store API and prefer to use extensibility methods that only append data to the response, this is to ensure stability in our requests and ensure a consistent, predictable, schema, something we can't do with filters.

Can you walk me through your case, we might be able to provide alternative solutions that still fulfil that. If not, you can follow this file to add ExtendSchema to that route:
https://github.com/woocommerce/woocommerce-gutenberg-products-block/blob/trunk/docs/extensibility/extend-rest-api-new-endpoint.md

@cpapazoglou
Copy link
Contributor Author

Hey @cpapazoglou! We don't use filters for Store API and prefer to use extensibility methods that only append data to the response, this is to ensure stability in our requests and ensure a consistent, predictable, schema, something we can't do with filters.

Can you walk me through your case, we might be able to provide alternative solutions that still fulfil that. If not, you can follow this file to add ExtendSchema to that route: https://github.com/woocommerce/woocommerce-gutenberg-products-block/blob/trunk/docs/extensibility/extend-rest-api-new-endpoint.md

👋 @senadir!
In our case, we want to filter the /wc/store/products results based on a new taxonomy. How could we extend that endpoint through the ExtendSchema so that it only returns products with a specific term of that new taxonomy? An example request would be https://woocommerce.test/wp-json/wc/store/products?wpcom_marketplace_categories=[that-category-id]

@cpapazoglou
Copy link
Contributor Author

@senadir I will be closing this in favour of #6152

@nielslange nielslange deleted the add/product_query_args_filter branch August 18, 2023 09:03
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants