在WooCommerce

时间:2017-04-15 04:02:16

标签: php wordpress woocommerce cart tax

如何在WordPress的 functions.php 页面中获取WooCommerce的税金总额,使用:

global $woocommerce;

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

但是没有返回任何值。

如何获得购物车税总额?

基本上我希望税收为用户计算,但随后客户将支付COD税款。

以下完整代码:

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

2 个答案:

答案 0 :(得分:5)

  1. global $woocommerce; $woocommerce->cart 对于购物车已过时。请改用 WC()->cart
    您可以直接使用$cart (对象)参数代替......
  2. 正确的属性为 taxes ,而不是 tax_total
  3. 最好使用WC_Cart get_taxes()方法intead与WooCommerce版本3.0 +兼容
  4. 实现您的目标您的代码将是:

    // 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 );
    }
    

    代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

    此代码经过测试并有效。

答案 1 :(得分:2)

您使用的是错误的功能名称。正确的功能如下: -

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

而不是使用$ woocommerce-> cart-> tax_total;要获得购物车总税,您可以通过从购物车总数中减去不包含税的购物车总数来实现此目的。

您可以通过以下代码执行此操作: -

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

如果您想获得所有税款的数组,那么您可以通过以下代码获取: -

WC()->cart->get_taxes( );