WC_Order_Item_Fee::calculate_taxes()publicWC 3.2.0

Calculate item taxes.

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

Возвращает

true|false. True if taxes were calculated.

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

$WC_Order_Item_Fee = new WC_Order_Item_Fee();
$WC_Order_Item_Fee->calculate_taxes( $calculate_tax_for );
$calculate_tax_for(массив)
Location data to get taxes for. Required.
По умолчанию: array()

Список изменений

С версии 3.2.0 Введена.

Код WC_Order_Item_Fee::calculate_taxes() WC 8.7.0

public function calculate_taxes( $calculate_tax_for = array() ) {
	if ( ! isset( $calculate_tax_for['country'], $calculate_tax_for['state'], $calculate_tax_for['postcode'], $calculate_tax_for['city'] ) ) {
		return false;
	}
	// Use regular calculation unless the fee is negative.
	if ( 0 <= $this->get_total() ) {
		return parent::calculate_taxes( $calculate_tax_for );
	}

	if ( wc_tax_enabled() && $this->get_order() ) {
		// Apportion taxes to order items, shipping, and fees.
		$order           = $this->get_order();
		$tax_class_costs = $this->get_tax_class_costs( $order );
		$total_costs     = array_sum( $tax_class_costs );
		$discount_taxes  = array();
		if ( $total_costs ) {
			foreach ( $tax_class_costs as $tax_class => $tax_class_cost ) {
				if ( 'non-taxable' === $tax_class ) {
					continue;
				}
				$proportion                     = $tax_class_cost / $total_costs;
				$cart_discount_proportion       = $this->get_total() * $proportion;
				$calculate_tax_for['tax_class'] = $tax_class;
				$tax_rates                      = WC_Tax::find_rates( $calculate_tax_for );
				$discount_taxes                 = wc_array_merge_recursive_numeric( $discount_taxes, WC_Tax::calc_tax( $cart_discount_proportion, $tax_rates ) );
			}
		}
		$this->set_taxes( array( 'total' => $discount_taxes ) );
	} else {
		$this->set_taxes( false );
	}

	do_action( 'woocommerce_order_item_fee_after_calculate_taxes', $this, $calculate_tax_for );

	return true;
}