2016-08-11 90 views
4

我嘗試根據我在Woocommerce購物車上進行的一些計算添加費用,但我希望將其從增值稅中排除。這是我的代碼:以編程方式向WooCommerce購物車免稅費用

function woo_add_cart_fee($cart) { 
    global $woocommerce; $bookable_total = 0; 

    foreach(WC()->cart->get_cart() as $cart_item_key => $values) { 
     $_product = $values['data']; 

     //doing my stuff to calculate $fee variable 

    WC()->cart->add_fee('Fees: ', $fee, false, ''); 
    //WC()->cart->add_fee('Fees: ', $fee, true, ''); 
    //WC()->cart->add_fee('Fees: ', $fee, false, 'zero rate'); 
    //WC()->cart->add_fee('Fees: ', $fee, true, 'zero rate'); 
} 

add_action('woocommerce_cart_calculate_fees', 'woo_add_cart_fee'); 

我試過了所有的評論版本,每個版本都包含增值稅費用。

任何想法如何實現它?

+0

抱歉耽擱。我還聯繫了woo商業支持,他們告訴我,我的初始代碼是正確的,並且可能與主題或其他插件有衝突。我將在星期一進行調查。 – Tasos

回答

1

更新稅選項與 add_fee() method

重要:稅收正在或add_fee() method事實上取決於第一的woocommerce計稅設置 。因爲您有不能告訴在您的問題什麼是您的稅務設置,這是不可能的幫助您(稅務設置可以有更多不同的每個電子商務網站)

例如,如果你想使用「零利率」稅類,但是你有沒有定義正確的「零利率」的稅收,爲客戶全國一流,如果您嘗試使用,這將不起作用它與:
WC()->cart->add_fee('Fees: ', $fee, true, 'zero rate'); ... 取決於您的全球稅收設置

這裏是REAL結帳總計的屏幕截圖,用於在臺車3項(用下面的代碼):

enter image description here

類WC_Cart add_fee()方法,增加了額外的費用,以車。

add_fee(string $name, float $amount, boolean $taxable = false, string $tax_class = '' ) 
Parameters: 
    $name  Unique name for the fee. Multiple fees of the same name cannot be added. 
    $amount Fee amount. 
    $taxable (default: false) Is the fee taxable? 
    $tax_class (default: '') The tax class for the fee if taxable. A blank string is standard tax class. 

原來的答覆(更新代碼)

你的主要問題是這一行:global $woocommerce, $bookable_total = 0;

  1. 當您使用WC()->cart語法而不是$woocommerce->cart語法,你並不真的需要global $woocommerce;
  2. 如果使用global $bookable_total = 0;$bookable_total總是= 0
    取而代之,您將使用global $bookable_total;沒有值以獲取在您的函數外定義的值。
    但是,如果你想值設置爲零,如果沒有你的函數定義之外,你會做這樣的:woo_add_cart_fee($bookable_total=0)

我們可以定義現在$bookable_total變量值外部功能

這是你的代碼工作的例子:

// This variable value is passed to our function 
$bookable_total = 1; 

function woo_add_cart_fee($bookable_total = 0) { 
    global $bookable_total; 

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

    // just for this example 
    $item_count = 0; 
    $item_fee = 5; 

    // going through each cart items 
    foreach(WC()->cart->get_cart() as $values) { 
     $item = $values['data']; 
     if (empty($item)) 
      break; 
     // getting the cart item_id 
     $item_id = $item->id; 
     $item_count++; 
     // your calculations 
    } 

    // We test $bookable_total value, defined to '1' outside our function 
    // and to 'O' if not defined outside (in this case the fee will be '0') 
    $fee = $item_count * $bookable_total * $item_fee; 

    // add_fee method (TAX will NOT be applied here) 
    WC()->cart->add_fee('Fees: ', $fee, false); 

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

此代碼測試,它的工作原理。它繼承您活動的兒童主題或主題的function.php文件。

如果$bookable_total變量不被外部定義,該值將是0

注:是更好地得到$項目IDS有:$item = $values['data']; $item_id = $item->id;


參考:
Class WC_Cart - add_fee($name, $amount, $taxable = false, $tax_class = '') method

+0

你好。謝謝你的詳細解答,但我相信存在誤解。 '$ bookable_total'只是一個我在循環中使用的變量,如果有特定的產品類型,它會改變。它不影響費用的數額。但是,要清楚。我的代碼添加了費用,但它包含稅。我想讓這筆費用免稅。這4個代碼中哪些不是。 – Tasos

+0

@Tasos好的,我已經更新了我的答案。您的問題肯定與您的woocommerce網站有關**稅務設置** ... – LoicTheAztec

+0

@Tasos Precision:在我截圖的實例中,我使用(作爲法國客戶)20%的正常稅率。所以如你所見稅收不適用於費用。 – LoicTheAztec

相關問題