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 ) ) ),
);
}
}