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

如何修改WooCommerce代码,仅强制特定类别商品使用优惠券?

解决WooCommerce特定类别商品强制使用优惠券的问题

嘿,我看你现在的代码是强制所有商品必须用优惠券,要改成只针对特定类别很简单,我们只需要在检查优惠券之前,先判断购物车里有没有属于目标类别的商品就行。

下面是修改后的完整代码,我会一步步解释关键部分:

add_action('woocommerce_check_cart_items', 'make_coupon_required_for_specific_category');

function make_coupon_required_for_specific_category() {
    // 这里定义需要强制优惠券的商品类别(用slug,多个的话用数组)
    $required_category_slugs = array('premium-products', 'vip-items');
    // 如果想用类别ID的话,把上面一行换成下面的,比如:
    // $required_category_ids = array(15, 22);
    
    $has_required_category = false;
    global $woocommerce;

    // 遍历购物车里的每一件商品,检查是否属于目标类别
    foreach ($woocommerce->cart->get_cart() as $cart_item) {
        $product = $cart_item['data'];
        
        // 用slug检查的话用这个
        if (has_term($required_category_slugs, 'product_cat', $product->get_id())) {
            $has_required_category = true;
            break; // 只要找到一件就不用继续遍历了
        }
        
        // 如果用ID检查的话,替换成下面的:
        // if (has_term($required_category_ids, 'product_cat', $product->get_id())) {
        //     $has_required_category = true;
        //     break;
        // }
    }

    // 只有当购物车里有目标类别商品,且没有应用优惠券时,才提示错误
    if (($has_required_category) && empty($woocommerce->cart->applied_coupons)) {
        wc_add_notice(
            __('您的购物车中有特定类别的商品,必须使用优惠券才能结账!', 'woocommerce'),
            'error'
        );
    }
}

关键说明:

  • 目标类别设置:你可以根据自己的需求,选择用类别slug或者ID来指定,把对应的数组值改成你需要的类别即可。
  • 购物车遍历检查:通过has_term函数判断商品是否属于目标类别,只要购物车里有一件这类商品,就标记为需要强制优惠券。
  • 错误提示:使用WooCommerce官方的wc_add_notice函数来输出错误,这样样式会和系统提示统一,也能正确阻止结账流程。
  • 兼容性:这段代码兼容WooCommerce最新版本,建议放到子主题的functions.php文件里,或者用自定义代码插件来添加,避免主题更新时丢失代码。

测试的时候记得:

  1. 只添加非目标类别的商品,应该可以正常结账
  2. 添加目标类别的商品但不使用优惠券,会弹出错误提示
  3. 添加目标类别的商品并应用优惠券,就能正常继续结账

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:31:58