2017-09-04 57 views
2

我最近尝试使用挂钩修改所有运费,以应用折扣。在“woocommerce_package_rates”挂钩中自定义税额

这里是我的代码:

add_filter('woocommerce_package_rates', 'woocommerce_package_rates'); 
function woocommerce_package_rates($rates) { 
    $user_id = get_current_user_id(); 
    if (! wc_memberships_is_user_active_member($user_id, 'silver')) { return $rates; } 
    $discount_amount = 30; // 30% 

    foreach($rates as $key => $rate) { 
     $rates[$key]->cost = $rates[$key]->cost - ($rates[$key]->cost * ($discount_amount/100)); 
    } 

    return $rates; 
} 

但一个步骤是税收!我错了税。
例如我的运费为3$。有了折扣,现在是2,10$

我为2$和shipping 2.10$买了一件物品。 我得到了1美元的税款(因为3美元的运费,看起来像他没有采取变化),通常是0.82$

我需要什么才能获得正确的计税?

回答

3

更新:相关的税收成本计算的运送方式

有你的代码的一些小错误,你已经错过了税计算折扣。我已经重新审视你的代码一点,你应该试试这个:

add_filter('woocommerce_package_rates', 'conditional_shipping_discount', 10, 2); 
function conditional_shipping_discount($rates, $packages) { 

    $user_id = get_current_user_id(); 
    if (! wc_memberships_is_user_active_member($user_id, 'silver')) return $rates; 

    $percent = 30; // 30% 
    $discount = 1 - ($percent/100); 

    foreach($rates as $rate_key => $rate_values) { 
     // Get original cost 
     $original_cost = $rates[$rate_id]->cost; 
     // Calculate the discounted rate cost 
     $new_cost = $original_cost * $discount; 
     // Set the discounted rate cost 
     $rates[$rate_key]->cost = number_format(new_cost, 2); 
     // calculate the conversion rate (for taxes) 
     $conversion_rate = $new_cost/$original_cost; 

     // Taxes rate cost (if enabled) 
     $taxes = array(); 
     foreach ($rates[$rate_key]->taxes as $key => $tax){ 
      if($tax > 0){ // set the new tax cost 
       // set the new line tax cost in the taxes array 
       $taxes[$key] = number_format($tax * $conversion_rate, 2); 
      } 
     } 
     // Set the new taxes costs 
     $rates[$rate_key]->taxes = $taxes 
    } 
    return $rates; 
} 

代码放在您的活动子主题(或主题)的function.php文件或也以任何插件文件。

该代码测试和工程。

你应该需要刷新航运缓存:
1)首先这个代码已经保存在您的function.php文件。
2)在运输设置中,输入运输区域并禁用运输方式和“保存”。然后重新启用运输方式和“保存”。 你完成了。

+0

哦,不错!非常感谢@LoicTheAztec!完美地我所需要的 – Efbi

+0

我不明白,我用你的答案,这次税收计算不起作用。也许这个代码与某些东西有冲突? – Efbi

+0

@Efbi我已经更新了代码周围的税计算 – LoicTheAztec