Search code examples
phpwordpresswoocommercecart

Get Cart Tax Total programmatically in WooCommerce


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' );

Solution

    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.