You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求Woocommerce钩子:特定优惠券按产品类别设差异化折扣

实现特定优惠券下不同产品类别的差异化折扣(Woocommerce)

当然能实现这个需求啦!我们可以借助Woocommerce的核心钩子woocommerce_before_calculate_totals,搭配优惠券验证逻辑,轻松搞定不同类别商品的差异化折扣。下面是一步步的实现方案:

核心实现思路

  • 先验证目标优惠券是否已经被应用到购物车
  • 遍历购物车内的每一件商品,检查它所属的产品类别
  • 针对类别A的商品设置10%折扣,类别B的商品设置20%折扣
  • 确保只有目标优惠券生效时才触发这个自定义折扣,避免和其他优惠逻辑冲突

完整代码示例

你可以把这段代码添加到子主题的functions.php文件中,或者使用自定义代码插件来部署:

add_action('woocommerce_before_calculate_totals', 'custom_category_discount_for_specific_coupon', 10, 1);
function custom_category_discount_for_specific_coupon($cart) {
    // 防止循环调用导致的异常
    if (is_admin() && !defined('DOING_AJAX')) return;
    if (did_action('woocommerce_before_calculate_totals') >= 2) return;

    // 替换成你实际要触发的优惠券代码
    $target_coupon_code = 'your-target-coupon';
    $is_coupon_applied = false;

    // 检查购物车是否应用了目标优惠券
    foreach ($cart->get_applied_coupons() as $applied_coupon) {
        if ($applied_coupon === $target_coupon_code) {
            $is_coupon_applied = true;
            break;
        }
    }

    // 如果目标优惠券没被使用,直接退出
    if (!$is_coupon_applied) return;

    // 替换成你实际的产品类别slug或ID
    $category_a_slug = 'category-a';
    $category_b_slug = 'category-b';

    // 遍历购物车内的所有商品
    foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
        $product = $cart_item['data'];
        $product_id = $cart_item['product_id'];

        // 判断商品所属类别并设置折扣比例
        if (has_term($category_a_slug, 'product_cat', $product_id)) {
            $discount_percent = 10;
        } elseif (has_term($category_b_slug, 'product_cat', $product_id)) {
            $discount_percent = 20;
        } else {
            // 不属于A/B类别的商品不应用自定义折扣
            continue;
        }

        // 计算折扣后价格并更新商品价格
        $original_price = $product->get_regular_price();
        $discounted_price = $original_price * (100 - $discount_percent) / 100;
        $product->set_price($discounted_price);
    }
}

关键说明与注意事项

  • 替换占位内容:记得把代码里的your-target-coupon、category-a、category-b替换成你实际的优惠券代码和产品类别slug/ID
  • 类别优先级:如果一件商品同时属于A和B两类,代码会优先应用A类的10%折扣,你可以调整if/elseif的顺序来改变优先级
  • 代码部署建议:优先使用子主题的functions.php,避免主题更新导致代码丢失;如果不熟悉代码编辑,也可以用类似Code Snippets的插件来添加
  • 测试验证:修改代码后记得清空购物车缓存,或者用无痕浏览器测试,确保折扣逻辑正常生效

内容的提问来源于stack exchange,提问作者Manik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:21:52