R ] ?? $max_range ); $formatted_min_price = html_entity_decode( wp_strip_all_tags( wc_price( $min_price, array( 'decimals' => 0 ) ) ) ); $formatted_max_price = html_entity_decode( wp_strip_all_tags( wc_price( $max_price, array( 'decimals' => 0 ) ) ) ); $filter_context = array( 'price' => array( 'minPrice' => $min_price, 'maxPrice' => $max_price, 'minRange' => $min_range, 'maxRange' => $max_range, ), 'groupLabel' => __( 'Price', 'woocommerce' ), ); $wrapper_attributes = array( 'data-wp-interactive' => 'woocommerce/product-filters', 'data-wp-key' => wp_unique_prefixed_id( $this->get_full_block_name() ), 'data-wp-context' => wp_json_encode( array( 'filterType' => 'price', 'minRange' => $min_range, 'maxRange' => $max_range, ), JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP, ), ); wp_interactivity_config( 'woocommerce/product-filters', array( 'activePriceLabelTemplates' => array( /* translators: {{min}} and {{max}} are the formatted minimum and maximum prices respectively. */ 'minAndMax' => __( 'Price: {{min}} - {{max}}', 'woocommerce' ), /* translators: {{max}} is the formatted maximum price. */ 'maxOnly' => __( 'Price: Up to {{max}}', 'woocommerce' ), /* translators: {{min}} is the formatted minimum price. */ 'minOnly' => __( 'Price: From {{min}}', 'woocommerce' ), ), ) ); wp_interactivity_state( 'woocommerce/product-filters', array( 'formattedMinPrice' => $formatted_min_price, 'formattedMaxPrice' => $formatted_max_price, 'minPrice' => $min_price, 'maxPrice' => $max_price, ) ); if ( $min_range === $max_range || ! $max_range ) { $wrapper_attributes['hidden'] = true; $wrapper_attributes['class'] = 'wc-block-product-filter--hidden'; return sprintf( '
%2$s
', get_block_wrapper_attributes( $wrapper_attributes ), array_reduce( $block->parsed_block['innerBlocks'], function ( $carry, $parsed_block ) { $carry .= render_block( $parsed_block ); return $carry; }, '' ) ); } return sprintf( '
%2$s
', get_block_wrapper_attributes( $wrapper_attributes ), array_reduce( $block->parsed_block['innerBlocks'], function ( $carry, $parsed_block ) use ( $filter_context ) { $carry .= ( new \WP_Block( $parsed_block, array( 'filterData' => $filter_context ) ) )->render(); return $carry; }, '' ) ); } /** * Retrieve the price filter data for current block. * * @param WP_Block $block Block instance. */ private function get_filtered_price( $block ) { if ( ! isset( $block->context['filterParams'] ) ) { return array(); } $query_vars = ProductCollectionUtils::get_query_vars( $block, 1 ); unset( $query_vars['min_price'], $query_vars['max_price'] ); if ( ! empty( $query_vars['meta_query'] ) ) { // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query $query_vars['meta_query'] = ProductCollectionUtils::remove_query_array( $query_vars['meta_query'], 'key', '_price' ); } if ( isset( $query_vars['taxonomy'] ) && false !== strpos( $query_vars['taxonomy'], 'pa_' ) ) { unset( $query_vars['taxonomy'], $query_vars['term'] ); } $container = wc_get_container(); $price_results = $container->get( FilterDataProvider::class )->with( $container->get( QueryClauses::class ) )->get_filtered_price( $query_vars ); return array( 'min_price' => intval( floor( floatval( $price_results['min_price'] ?? 0 ) ) ), 'max_price' => intval( ceil( floatval( $price_results['max_price'] ?? 0 ) ) ), ); } }