Get Cart Tax Total programmatically in WooCommerce

DEVPROCB picture DEVPROCB · Apr 15, 2017 · Viewed 14k times · Source

How do you get the tax total in WooCommerce in the functions.php page in WordPress, Using :

global $woocommerce;

$discount = $woocommerce->cart->tax_total;

But is not returning any value.

How can I get Cart Tax Total?

Essentially I want the Tax to calculate for the user, but then have it reduced as the customer will pay the taxes on COD.

Full Code below:

add_action( 'woocommerce_calculate_totals', 'action_cart_calculate_totals', 10, 1 );
function action_cart_calculate_totals( $cart_object ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( !WC()->cart->is_empty() ):
        $cart_object->cart_contents_total *= .10 ;

    endif;
}


//Code for removing tax from total collected
function prefix_add_discount_line( $cart ) {

  global $woocommerce;

  $discount = $woocommerce->cart->tax_total;

  $woocommerce->cart->add_fee( __( 'Tax Paid On COD', 'your-text-domain' ) , - $discount );

}
add_action( 'woocommerce_cart_calculate_fees', 'prefix_add_discount_line' );

Answer

LoicTheAztec picture LoicTheAztec · Apr 15, 2017
  1. global $woocommerce; $woocommerce->cart is obsolete for Cart. Use WC()->cart instead.
    Here you can use directly $cart (object) argument instead…
  2. The correct property is taxes instead of tax_total.
  3. Is better to use WC_Cart get_taxes() method intead to be compatible with WooCommerce version 3.0+

To achieve what you are trying to Your code is going to be:

// For Woocommerce 2.5+ (2.6.x and 3.0)
add_action( 'woocommerce_cart_calculate_fees', 'prefix_add_discount_line', 10, 1 );
function prefix_add_discount_line( $cart ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    $discount = 0;
    // Get the unformated taxes array
    $taxes = $cart->get_taxes(); 
    // Add each taxes to $discount
    foreach($taxes as $tax) $discount += $tax;

    // Applying a discount if not null or equal to zero
    if ($discount > 0 && ! empty($discount) )
        $cart->add_fee( __( 'Tax Paid On COD', 'your-text-domain' ) , - $discount );
}

Code goes in function.php file of your active child theme (or theme) or also in any plugin file.

This code is tested and works.