Setting a tax class based on specific coupon in Woocommerce

杀马特。学长 韩版系。学妹 提交于 2021-02-10 20:52:05

问题


This has been answered a while back but the filter is not working anymore. Not sure if it is deprecated or not. I am using both filters:

  • woocommerce_product_tax_class
  • woocommerce_product_get_tax_class

My function looks like:

function wc_diff_rate_for_user( $tax_class, $product ) {
    $tax_class = "Zero rate";
    return $tax_class;
}
add_filter( 'woocommerce_product_tax_class', 'wc_diff_rate_for_user', 1, 2 );

How can I set a tax class based on specific coupon in Woocommerce?


回答1:


Since Woocommerce 3, the filter hook woocommerce_product_tax_class doesn't exist anymore, only new woocommerce_product_get_tax_class composite filter hook is available and works.

There is multiple ways to set a tax class based on an applied coupon code (In both examples below, we set "Zero rate" tax class when a defined coupon code is applied):

1) Using woocommerce_before_calculate_totals action hook, the best way:

add_action( 'woocommerce_before_calculate_totals', 'change_tax_class_based_on_specific_coupon', 25, 1 );
function change_tax_class_based_on_specific_coupon( $cart ) {
    // Define your coupon code below
    if ( ! $cart->has_discount('summer') )
        return;

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

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;


    foreach( $cart->get_cart() as $cart_item ){
        // We set "Zero rate" tax class
        $cart_item['data']->set_tax_class("Zero rate");
    }
}

Code goes in function.php file of the active child theme (or active theme). Tested and works.


2) Using woocommerce_product_get_tax_class filter hook:

add_filter( 'woocommerce_product_get_tax_class', 'change_tax_class_based_on_specific_coupon', 30, 2 );
function change_tax_class_based_on_specific_coupon( $tax_class, $product ) {
    // Define your coupon code below
    if( WC()->cart->has_discount('summer') )
        $tax_class = "Zero rate";

    return $tax_class;
}

Code goes in function.php file of the active child theme (or active theme). Tested and works.



来源:https://stackoverflow.com/questions/52551387/setting-a-tax-class-based-on-specific-coupon-in-woocommerce

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!