From d3a846a052b4532a851897e153aaf57c677037c8 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 (#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/src/BlockTypes/ProductQuery.php b/src/BlockTypes/ProductQuery.php index 0a928e02513..3d5f695b0cd 100644 --- a/src/BlockTypes/ProductQuery.php +++ b/src/BlockTypes/ProductQuery.php @@ -120,11 +120,13 @@ public function update_query( $pre_render, $parsed_block ) { * @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 @@ private function get_custom_orderby_query( $orderby ) { * * @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 ) {