以编程方式向WooCommerce购物车添加免税费用

时间:2016-08-11 10:57:02

标签: php wordpress woocommerce cart fee

我尝试根据我在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' );

我已经尝试了所有评论版本,每个版本都包含费用增值税。

知道如何实现它吗?

1 个答案:

答案 0 :(得分:2)

更新带有 add_fee() method 的付款选项

  

重要事项:TAX 工作与否add_fee() method相关的事实取决于woocommerce中的您的首次税务设置。由于您的问题没有告诉 您的税收设置,因此无法帮助您(每个电子商务的税务设置可能会有所不同)网站)

例如,如果您想使用'零费率'税级,但您尚未为客户所在国家/地区定义正确的“零费率”税级,那么如果您尝试用它:
WC()->cart->add_fee( 'Fees: ', $fee, true, 'zero rate' ); ... 取决于您的全球税务设置

以下是购物车中3件物品的REAL结帐总额的截图(使用下面的代码):

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.   
  3. 如果您使用 global $bookable_total = 0; $bookable_total 始终 = 0 < / strong>即可。
      相反,您将使用 global $bookable_total; 而不使用值来获取在函数外定义的值。
      但是,如果你想将值设置为零,如果未在函数外定义,则可以这样做: woo_add_cart_fee( $bookable_total=0 )
  4.   

我们现在可以在函数外定义 $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

  

注意:最好通过以下方式获取$ items ID: $item = $values['data']; $item_id = $item->id;

<强>参考:
Class WC_Cart - add_fee( $name, $amount, $taxable = false, $tax_class = '' ) method