WC_Query::price_filter_post_clauses()publicWC 3.6.0

Custom query used to filter products by price.

Метод класса: WC_Query{}

Хуки из метода

Возвращает

Массив.

Использование

$WC_Query = new WC_Query();
$WC_Query->price_filter_post_clauses( $args, $wp_query );
$args(массив) (обязательный)
Query args.
$wp_query(WP_Query) (обязательный)
WP_Query object.

Список изменений

С версии 3.6.0 Введена.

Код WC_Query::price_filter_post_clauses() WC 8.7.0

public function price_filter_post_clauses( $args, $wp_query ) {
	global $wpdb;

	// phpcs:ignore WordPress.Security.NonceVerification.Recommended
	if ( ! $wp_query->is_main_query() || ( ! isset( $_GET['max_price'] ) && ! isset( $_GET['min_price'] ) ) ) {
		return $args;
	}

	// phpcs:disable WordPress.Security.NonceVerification.Recommended
	$current_min_price = isset( $_GET['min_price'] ) ? floatval( wp_unslash( $_GET['min_price'] ) ) : 0;
	$current_max_price = isset( $_GET['max_price'] ) ? floatval( wp_unslash( $_GET['max_price'] ) ) : PHP_INT_MAX;
	// phpcs:enable WordPress.Security.NonceVerification.Recommended

	/**
	 * Adjust if the store taxes are not displayed how they are stored.
	 * Kicks in when prices excluding tax are displayed including tax.
	 */
	if ( wc_tax_enabled() && 'incl' === get_option( 'woocommerce_tax_display_shop' ) && ! wc_prices_include_tax() ) {
		$tax_class = apply_filters( 'woocommerce_price_filter_widget_tax_class', '' ); // Uses standard tax class.
		$tax_rates = WC_Tax::get_rates( $tax_class );

		if ( $tax_rates ) {
			$current_min_price -= WC_Tax::get_tax_total( WC_Tax::calc_inclusive_tax( $current_min_price, $tax_rates ) );
			$current_max_price -= WC_Tax::get_tax_total( WC_Tax::calc_inclusive_tax( $current_max_price, $tax_rates ) );
		}
	}

	$args['join']   = $this->append_product_sorting_table_join( $args['join'] );
	$args['where'] .= $wpdb->prepare(
		' AND NOT (%f<wc_product_meta_lookup.min_price OR %f>wc_product_meta_lookup.max_price ) ',
		$current_max_price,
		$current_min_price
	);
	return $args;
}