From 4e340ee3ed0eb48787ee5020d830f8904c9b3624 Mon Sep 17 00:00:00 2001 From: Lucio Giannotta Date: Thu, 1 Dec 2022 16:42:25 +0100 Subject: [PATCH] Product Query: make sure request params are set when enhancing REST query (https://github.com/woocommerce/woocommerce-blocks/pull/7796) This fixes a bug in which in certain cases Products wouldn't load in the editor because the Product Query block was doing some REST API request with some invalid parameters. --- .../src/BlockTypes/ProductQuery.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/plugins/woocommerce-blocks/src/BlockTypes/ProductQuery.php b/plugins/woocommerce-blocks/src/BlockTypes/ProductQuery.php index 0a928e02513..3d5f695b0cd 100644 --- a/plugins/woocommerce-blocks/src/BlockTypes/ProductQuery.php +++ b/plugins/woocommerce-blocks/src/BlockTypes/ProductQuery.php @@ -120,11 +120,13 @@ class ProductQuery extends AbstractBlock { * @param WP_REST_Request $request Request. */ public function update_rest_query( $args, $request ) { - $on_sale_query = $request->get_param( '__woocommerceOnSale' ) !== 'true' ? array() : $this->get_on_sale_products_query(); - $orderby_query = $this->get_custom_orderby_query( $request->get_param( 'orderby' ) ); - $tax_query = $this->get_product_attributes_query( $request->get_param( '__woocommerceAttributes' ) ); + $orderby = $request->get_param( 'orderby' ); + $woo_attributes = $request->get_param( '__woocommerceAttributes' ); + $on_sale_query = $request->get_param( '__woocommerceOnSale' ) === 'true' ? $this->get_on_sale_products_query() : array(); + $orderby_query = isset( $orderby ) ? $this->get_custom_orderby_query( $orderby ) : array(); + $attributes_query = is_array( $woo_attributes ) ? $this->get_product_attributes_query( $woo_attributes ) : array(); - return array_merge( $args, $on_sale_query, $orderby_query, $tax_query ); + return array_merge( $args, $on_sale_query, $orderby_query, $attributes_query ); } /** @@ -287,7 +289,7 @@ class ProductQuery extends AbstractBlock { * * @return array */ - private function get_product_attributes_query( $attributes ) { + private function get_product_attributes_query( $attributes = array() ) { $grouped_attributes = array_reduce( $attributes, function ( $carry, $item ) {