WC_Tax::calc_exclusive_tax PHP Method

calc_exclusive_tax() public static method

Calc tax from exclusive price.
public static calc_exclusive_tax ( float $price, array $rates ) : array
$price float
$rates array
return array
    public static function calc_exclusive_tax($price, $rates)
    {
        $taxes = array();
        if (!empty($rates)) {
            // Multiple taxes
            foreach ($rates as $key => $rate) {
                if ('yes' === $rate['compound']) {
                    continue;
                }
                $tax_amount = $price * ($rate['rate'] / 100);
                // ADVANCED: Allow third parties to modify this rate
                $tax_amount = apply_filters('woocommerce_price_ex_tax_amount', $tax_amount, $key, $rate, $price);
                // Add rate
                if (!isset($taxes[$key])) {
                    $taxes[$key] = $tax_amount;
                } else {
                    $taxes[$key] += $tax_amount;
                }
            }
            $pre_compound_total = array_sum($taxes);
            // Compound taxes
            foreach ($rates as $key => $rate) {
                if ('no' === $rate['compound']) {
                    continue;
                }
                $the_price_inc_tax = $price + $pre_compound_total;
                $tax_amount = $the_price_inc_tax * ($rate['rate'] / 100);
                // ADVANCED: Allow third parties to modify this rate
                $tax_amount = apply_filters('woocommerce_price_ex_tax_amount', $tax_amount, $key, $rate, $price, $the_price_inc_tax, $pre_compound_total);
                // Add rate
                if (!isset($taxes[$key])) {
                    $taxes[$key] = $tax_amount;
                } else {
                    $taxes[$key] += $tax_amount;
                }
            }
        }
        return $taxes;
    }

Usage Example

    /**
     * Output widget.
     *
     * @see WP_Widget
     *
     * @param array $args
     * @param array $instance
     */
    public function widget($args, $instance)
    {
        global $wp, $wp_the_query;
        if (!is_post_type_archive('product') && !is_tax(get_object_taxonomies('product'))) {
            return;
        }
        if (!$wp_the_query->post_count) {
            return;
        }
        $min_price = isset($_GET['min_price']) ? esc_attr($_GET['min_price']) : '';
        $max_price = isset($_GET['max_price']) ? esc_attr($_GET['max_price']) : '';
        wp_enqueue_script('wc-price-slider');
        // Find min and max price in current result set
        $prices = $this->get_filtered_price();
        $min = floor($prices->min_price);
        $max = ceil($prices->max_price);
        if ($min === $max) {
            return;
        }
        $this->widget_start($args, $instance);
        if ('' === get_option('permalink_structure')) {
            $form_action = remove_query_arg(array('page', 'paged'), add_query_arg($wp->query_string, '', home_url($wp->request)));
        } else {
            $form_action = preg_replace('%\\/page/[0-9]+%', '', home_url(trailingslashit($wp->request)));
        }
        /**
         * Adjust max if the store taxes are not displayed how they are stored.
         * Min is left alone because the product may not be taxable.
         * 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_classes = array_merge(array(''), WC_Tax::get_tax_classes());
            $class_max = $max;
            foreach ($tax_classes as $tax_class) {
                if ($tax_rates = WC_Tax::get_rates($tax_class)) {
                    $class_max = $max + WC_Tax::get_tax_total(WC_Tax::calc_exclusive_tax($max, $tax_rates));
                }
            }
            $max = $class_max;
        }
        echo '<form method="get" action="' . esc_url($form_action) . '">
			<div class="price_slider_wrapper">
				<div class="price_slider" style="display:none;"></div>
				<div class="price_slider_amount">
					<input type="text" id="min_price" name="min_price" value="' . esc_attr($min_price) . '" data-min="' . esc_attr(apply_filters('woocommerce_price_filter_widget_min_amount', $min)) . '" placeholder="' . esc_attr__('Min price', 'woocommerce') . '" />
					<input type="text" id="max_price" name="max_price" value="' . esc_attr($max_price) . '" data-max="' . esc_attr(apply_filters('woocommerce_price_filter_widget_max_amount', $max)) . '" placeholder="' . esc_attr__('Max price', 'woocommerce') . '" />
					<button type="submit" class="button">' . __('Filter', 'woocommerce') . '</button>
					<div class="price_label" style="display:none;">
						' . __('Price:', 'woocommerce') . ' <span class="from"></span> &mdash; <span class="to"></span>
					</div>
					' . wc_query_string_form_fields(null, array('min_price', 'max_price'), '', true) . '
					<div class="clear"></div>
				</div>
			</div>
		</form>';
        $this->widget_end($args);
    }
All Usage Examples Of WC_Tax::calc_exclusive_tax