Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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' );
like image 592
DEVPROCB Avatar asked Apr 15 '17 04:04

DEVPROCB


2 Answers

  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.

like image 110
LoicTheAztec Avatar answered Nov 09 '22 05:11

LoicTheAztec


You are using wrong function name. Correct function is as below :-

WC()->cart->get_tax_totals( );

Instead of using $woocommerce->cart->tax_total; to get cart total tax, you can do this by subtracting cart total excluding tax from cart total.

You can do this by following code :-

$total_tax = floatval( preg_replace( '#[^\d.]#', '', WC()->cart->get_cart_total() ) ) - WC()->cart->get_total_ex_tax();

If you want to get array for all taxes then you can get through below code :-

WC()->cart->get_taxes( );
like image 35
WildProgrammers Avatar answered Nov 09 '22 05:11

WildProgrammers