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

求助:如何实现基于购物车小计与指定分类自动添加WooCommerce商品至购物车

解决WooCommerce按指定分类商品总金额自动添加商品的问题

我明白你的需求啦——你已经能判断购物车里有没有指定分类的商品,但卡在了计算这些分类商品的总金额是否达到设定最小值这一步。咱们来一步步修正你的代码:

原代码的问题点

你之前的代码里$product_subtotal没有定义,而且逻辑上只是检查单个商品的金额,不是累加指定分类下所有商品的总金额,这就导致金额判断完全失效了。

修正后的完整代码

add_action( 'woocommerce_before_calculate_totals', 'auto_add_item_based_on_product_category', 10, 1 );
function auto_add_item_based_on_product_category( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return;

    $min_price = 77.47; // 最低购物车金额(指定分类商品总金额)
    $required_categories = array('computer-based', 'esami-paper-based'); // 指定商品分类
    $added_product_id = 5065; // 自动添加的特定商品ID

    $category_subtotal = 0; // 初始化指定分类商品的总金额
    $added_item_key = ''; // 记录已添加的目标商品在购物车中的key

    // 遍历购物车商品,完成两个核心操作:累加指定分类金额、检查目标商品是否已存在
    foreach ( $cart->get_cart() as $item_key => $item ) {
        $product_id = $item['product_id'];
        
        // 1. 累加指定分类商品的总金额
        if( has_term( $required_categories, 'product_cat', $product_id ) ) {
            $category_subtotal += $item['line_subtotal']; // 累加该商品的小计(不含运费/税费)
        }

        // 2. 检查目标商品是否已经在购物车里
        if( $product_id == $added_product_id ) {
            $added_item_key = $item_key;
        }
    }

    // 判断是否满足添加条件:指定分类总金额达标,且目标商品未在购物车中
    $should_add = ( $category_subtotal >= $min_price ) && empty( $added_item_key );
    // 判断是否需要移除:指定分类总金额不达标,但目标商品已经在购物车中
    $should_remove = ( $category_subtotal < $min_price ) && !empty( $added_item_key );

    // 执行添加或移除操作
    if ( $should_add ) {
        $cart->add_to_cart( $added_product_id );
    } elseif ( $should_remove ) {
        $cart->remove_cart_item( $added_item_key );
    }
}

关键修改说明

  • 累加指定分类金额:新增$category_subtotal变量,遍历购物车时,只要商品属于指定分类,就把它的line_subtotal(商品的小计,即数量×单价,不含额外费用)累加到这个变量里。
  • 简化逻辑判断:把添加和移除的条件拆成清晰的$should_add和$should_remove,让代码更容易维护。
  • 更严谨的状态检查:确保只有当金额达标且目标商品不在购物车时才添加;金额不达标但目标商品已存在时则移除,覆盖了所有场景。

这样修改后,就能准确实现“当指定分类商品总金额达到设定最小值时自动添加特定商品,金额不够时自动移除”的需求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 07:44:06