WC_Query::price_filter_post_clauses()
Custom query used to filter products by price.
Method of the class: WC_Query{}
Hooks from the method
Return
Array
.
Usage
$WC_Query = new WC_Query(); $WC_Query->price_filter_post_clauses( $args, $wp_query );
- $args(array) (required)
- Query args.
- $wp_query(WP_Query) (required)
- WP_Query object.
Changelog
Since 3.6.0 | Introduced. |
WC_Query::price_filter_post_clauses() WC Query::price filter post clauses code WC 7.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; }