WC_Order_Item_Fee::calculate_taxes( array $calculate_tax_for = array() )
Calculate item taxes.
Description Description
Parameters Parameters
- $calculate_tax_for
-
(Optional) Location data to get taxes for. Required.
Default value: array()
Return Return
(bool) True if taxes were calculated.
Source Source
File: includes/class-wc-order-item-fee.php
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; }
Changelog Changelog
Version | Description |
---|---|
3.2.0 | Introduced. |