WC_Query::price_filter_post_clauses
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 Query::price filter post clauses WC 10.6.2
public function price_filter_post_clauses( $args, $wp_query ) {
global $wpdb;
/**
* Filter whether to add the filter post clauses
*
* @param bool $is_main_query Whether the current query is 'is_main_query'.
* @param WP_Query $wp_query The current WP_Query object.
*
* @since 9.9.0
*/
$enable_filtering = apply_filters( 'woocommerce_enable_post_clause_filtering', $wp_query->is_main_query(), $wp_query );
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
if ( ! $enable_filtering || ( ! 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;
}