WC_Tax::calc_inclusive_tax()public staticWC 1.0

Calc tax from inclusive price.

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

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

Возвращает

Массив.

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

$result = WC_Tax::calc_inclusive_tax( $price, $rates );
$price(float) (обязательный)
Price to calculate tax for.
$rates(массив) (обязательный)
Array of tax rates.

Код WC_Tax::calc_inclusive_tax() WC 8.7.0

public static function calc_inclusive_tax( $price, $rates ) {
	$taxes          = array();
	$compound_rates = array();
	$regular_rates  = array();

	// Index array so taxes are output in correct order and see what compound/regular rates we have to calculate.
	foreach ( $rates as $key => $rate ) {
		$taxes[ $key ] = 0;

		if ( 'yes' === $rate['compound'] ) {
			$compound_rates[ $key ] = $rate['rate'];
		} else {
			$regular_rates[ $key ] = $rate['rate'];
		}
	}

	$compound_rates = array_reverse( $compound_rates, true ); // Working backwards.

	$non_compound_price = $price;

	foreach ( $compound_rates as $key => $compound_rate ) {
		$tax_amount         = apply_filters( 'woocommerce_price_inc_tax_amount', $non_compound_price - ( $non_compound_price / ( 1 + ( $compound_rate / 100 ) ) ), $key, $rates[ $key ], $price );
		$taxes[ $key ]     += $tax_amount;
		$non_compound_price = $non_compound_price - $tax_amount;
	}

	// Regular taxes.
	$regular_tax_rate = 1 + ( array_sum( $regular_rates ) / 100 );

	foreach ( $regular_rates as $key => $regular_rate ) {
		$the_rate       = ( $regular_rate / 100 ) / $regular_tax_rate;
		$net_price      = $price - ( $the_rate * $non_compound_price );
		$tax_amount     = apply_filters( 'woocommerce_price_inc_tax_amount', $price - $net_price, $key, $rates[ $key ], $price );
		$taxes[ $key ] += $tax_amount;
	}

	/**
	 * 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;
}