WC_Tax::calc_exclusive_tax( float $price, array $rates )
Calc tax from exclusive price.
Description Description
Parameters Parameters
- $price
-
(Required) Price to calculate tax for.
- $rates
-
(Required) Array of tax rates.
Return Return
(array)
Source Source
File: includes/class-wc-tax.php
public static function calc_exclusive_tax( $price, $rates ) { $taxes = array(); if ( ! empty( $rates ) ) { foreach ( $rates as $key => $rate ) { if ( 'yes' === $rate['compound'] ) { continue; } $tax_amount = $price * ( $rate['rate'] / 100 ); $tax_amount = apply_filters( 'woocommerce_price_ex_tax_amount', $tax_amount, $key, $rate, $price ); // ADVANCED: Allow third parties to modify this 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 ); $tax_amount = apply_filters( 'woocommerce_price_ex_tax_amount', $tax_amount, $key, $rate, $price, $the_price_inc_tax, $pre_compound_total ); // ADVANCED: Allow third parties to modify this rate. if ( ! isset( $taxes[ $key ] ) ) { $taxes[ $key ] = $tax_amount; } else { $taxes[ $key ] += $tax_amount; } $pre_compound_total = array_sum( $taxes ); } } /** * Round all taxes to precision (4DP) before passing them back. Note, this is not the same rounding * as in the cart calculation class which, depending on settings, will round to 2DP when calculating * final totals. Also unlike that class, this rounds .5 up for all cases. */ $taxes = array_map( array( __CLASS__, 'round' ), $taxes ); return $taxes; }