仅将 woocommerce 优惠券应用于购物车总数,而非税线

Posted

技术标签:

【中文标题】仅将 woocommerce 优惠券应用于购物车总数,而非税线【英文标题】:Apply woocommerce coupon only to the cart total, not to the tax line 【发布时间】:2018-12-18 07:14:30 【问题描述】:

我正在开发一个 WooCommerce 网站。当我在结帐页面申请优惠券时,它也会自动适用于税收。

我只想将优惠券代码应用于购物车总数。我通过谷歌搜索了相关的钩子或插件,但找不到有效的解决方案。

这是我当前在functions.php 中的代码挂钩,但它没有按预期工作。

add_action('woocommerce_product_tax_class', 'set_tax_class');
function set_tax_class ()  
    if (!empty($woocommerce->cart->applied_coupons))
        $tax_class = 'gratuty';
    
    return $tax_class;

我也尝试过woocommerce_cart_calculate_fees 钩子,但没有成功。

应用优惠券时,我应该使用哪个挂钩来更新购物车,而不更改税费?

【问题讨论】:

查看这个***.com/a/27166704/4778809 @VikasYadav:上面的链接用于以编程方式将折扣添加到购物车中,我已经从结帐页面申请优惠券,当时优惠券也适用于税收,我不想这样做. 这太复杂了(或太宽泛了),因为你不能只使用一个钩子,因为有许多优惠券种类以不同的方式计算(所以税可以在项目行中设置或总计行)。此外,您还应该找到与购物车相关的正确钩子以及订购对象。所以这似乎真的很大。 Automatic/Woocommerce 应该已经实现了一个选项(只有 Fee API)来让他们有或没有税,但不幸的是事实并非如此。 对于作为折扣(负费用)使用的 Fee Api,如您所见,tax 参数确实适用于负费用,因为它将折扣应用于税款,但它很多更容易调整…… 为了清楚起见,我编辑了您的问题,它正在等待批准。请注意,您的 function.php 应该是 functions.php。这是您应该使用的正确文件名,我想确保您知道这一点,这也是您所拥有的。 【参考方案1】:

我相信你必须在 WooCommerce >> 设置 >> 税收中查看税收。在此,您必须选择“不,我将输入不含税的价格”复选框。

此外,请查看以下链接以了解有关税收的更多信息: https://github.com/woocommerce/woocommerce/wiki/How-Taxes-Work-in-WooCommerce

或者除此之外,您还可以理解以下代码以编程方式应用优惠券:

function apply_matched_coupons()
    $coupon_code = 'freeweek'; 
    if ( WC()->cart->has_discount( $coupon_code ) ) return;     
    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) 
        // this is your product ID
        $autocoupon = array( 40 );
        if( in_array( $cart_item['product_id'], $autocoupon ) )    
            WC()->cart->add_discount( $coupon_code );
            wc_print_notices();
        
    

希望这会有所帮助!

【讨论】:

【参考方案2】:

您可以在两个页面上的购物车和结帐中自动添加优惠券代码。假设客户将产品添加到购物车但没有打开购物车页面并直接将商店页面移动到结帐页面然后为购物车页面发出自动申请优惠券

所以你应该调用两个钩子(购物车页面和结帐页面)

/**
 * Apply a Coupon Programmatically 
 * Add coupon when the user views the cart page.
 * Add coupon when the user views checkout page.
 */

// Add coupon when user views cart page.
add_action('woocommerce_before_cart_table', 'woo_apply_matched_coupons');

// Add coupon when user views checkout page.
add_action('woocommerce_before_checkout_form', 'woo_apply_matched_coupons');

function woo_apply_matched_coupons() 
    global $woocommerce;

    $coupon_code = 'ABCD125467';   // your coupon code

    // If coupon not Applied!.
    if (!$woocommerce->cart->add_discount(sanitize_text_field($coupon_code))) 
        wc_print_notices();
     

    // Manually recalculate totals.  If you do not do this, a refresh is required before the user will see updated totals when the discount is removed.
    $woocommerce->cart->calculate_totals();

【讨论】:

以上是关于仅将 woocommerce 优惠券应用于购物车总数,而非税线的主要内容,如果未能解决你的问题,请参考以下文章

根据排除某些产品的 WooCommerce 购物车小计自动应用优惠券

Woocommerce:如何在应用/删除优惠券时禁用 AJAX?

即使购物车在 WooCommerce 中为空,也可以通过 URL 中的 GET 方法应用优惠券折扣

Woocommerce 购物车优惠券价值占位符更改

如何以编程方式删除 Woocommerce 中应用的折扣券?

如何在 Woocommerce 购物车页面中添加订单备注字段?