Automattic\WooCommerce\Internal\ProductFilters

QueryClauses::add_price_clausespublicWC 1.0

Add query clauses for price filter.

Method of the class: QueryClauses{}

No Hooks.

Returns

Array.

Usage

$QueryClauses = new QueryClauses();
$QueryClauses->add_price_clauses( $args, $price_range ): array;
$args(array) (required)
Query args.
$price_range(array) (required)

Price range array.

  • min_price(int|string)
    Optional. Min price.

  • max_price(int|string)
    Optional. Max Price.

QueryClauses::add_price_clauses() code WC 10.3.3

public function add_price_clauses( array $args, array $price_range ): array {
	if ( ! isset( $price_range['min_price'] ) && ! isset( $price_range['max_price'] ) ) {
		return $args;
	}

	global $wpdb;

	$adjust_for_taxes = $this->should_adjust_price_filters_for_displayed_taxes();
	$args['join']     = $this->append_product_sorting_table_join( $args['join'] );

	if ( isset( $price_range['min_price'] ) ) {
		$min_price_filter = intval( $price_range['min_price'] );

		if ( $adjust_for_taxes ) {
			$args['where'] .= $this->get_price_filter_query_for_displayed_taxes( $min_price_filter, 'max_price', '>=' );
		} else {
			$args['where'] .= $wpdb->prepare( ' AND wc_product_meta_lookup.max_price >= %f ', $min_price_filter );
		}
	}

	if ( isset( $price_range['max_price'] ) ) {
		$max_price_filter = intval( $price_range['max_price'] );

		if ( $adjust_for_taxes ) {
			$args['where'] .= $this->get_price_filter_query_for_displayed_taxes( $max_price_filter, 'min_price', '<=' );
		} else {
			$args['where'] .= $wpdb->prepare( ' AND wc_product_meta_lookup.min_price <= %f ', $max_price_filter );
		}
	}

	return $args;
}