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

WooCommerce按商品分类独立设置购物车重量限制的实现方案

WooCommerce 按商品分类独立限制购物车重量实现方案

你之前写的全站总重量限制逻辑基础没问题,要实现分类独立限重,必须先遍历购物车商品,按所属分类单独累计重量后再做阈值校验。之前直接写if ( $category = "Category 1")不生效有两个核心原因:一是没有遍历购物车提取每个商品的分类属性,$category变量本身是空的;二是单等号是赋值操作,不是相等判断,且WooCommerce商品分类不能直接通过全局变量读取,需要通过商品ID调用WordPress原生分类查询函数获取。

可直接落地的代码

把下面代码替换你原来functions.php里的限重代码即可,注释位置可以自行调整分类限重规则:

add_action('woocommerce_check_cart_items','check_cart_weight_by_category');
function check_cart_weight_by_category(){
    global $woocommerce;
    // 分类限重规则配置:键填商品分类slug,值填对应分类允许的单订单最大重量(单位和后台设置的重量单位一致)
    $category_weight_limits = [
        'category-1' => 30,    // 分类1 限重30g,请替换为你站点实际的分类slug
        'category-2' => 38.34, // 分类2 限重38.34g
        'category-3' => 50,    // 分类3 限重50g
        'category-4' => 100,   // 分类4 限重100g
    ];
    $category_weight_stats = [];

    // 遍历购物车所有商品,按分类累计重量
    foreach( $woocommerce->cart->get_cart() as $cart_item ){
        $product = $cart_item['data'];
        $item_total_weight = floatval($product->get_weight()) * $cart_item['quantity'];
        // 获取当前商品关联的商品分类slug
        $product_cats = wp_get_post_terms($cart_item['product_id'], 'product_cat', ['fields' => 'slugs']);
        // 匹配配置了限重规则的分类,累加重量
        foreach($product_cats as $cat_slug){
            if(isset($category_weight_limits[$cat_slug])){
                $category_weight_stats[$cat_slug] = isset($category_weight_stats[$cat_slug]) 
                    ? $category_weight_stats[$cat_slug] + $item_total_weight 
                    : $item_total_weight;
            }
        }
    }

    // 逐个校验分类重量,超重就抛出错误提示阻止结算
    foreach($category_weight_stats as $cat_slug => $total_weight){
        $limit = $category_weight_limits[$cat_slug];
        if($total_weight > $limit){
            $cat_info = get_term_by('slug', $cat_slug, 'product_cat');
            wc_add_notice(
                sprintf(
                    __('分类「%s」下商品总重量为%sg,该分类单订单最高允许重量为%sg,请调整购物车商品后再提交订单。', 'woocommerce'),
                    $cat_info->name,
                    $total_weight,
                    $limit
                ),
                'error'
            );
        }
    }
}

配置说明

  • 优先用分类slug做规则匹配键,不要直接用分类名,后续修改分类名称不会导致限重规则失效
  • 重量统计已经自动乘以商品购买数量,不需要额外处理多件购买的重量计算
  • 若单个商品同时归属多个配置了限重规则的分类,会分别计入对应分类的重量统计,各分类重量独立计算互不干扰
  • 如果需要用分类ID配置规则,只需要把获取分类的参数改成返回ID,规则数组的键换成对应分类ID即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:24:09