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

WooCommerce统计购物车自定义分类数量并乘购物车总价的实现问题

WooCommerce 自定义city分类关联购物车价格计算实现方案

核心实现逻辑

使用WooCommerce官方钩子woocommerce_before_calculate_totals在购物车计算总价阶段注入自定义逻辑,无需修改系统核心文件,兼容性更强。

完整实现代码

add_action( 'woocommerce_before_calculate_totals', 'custom_calculate_price_by_city_count', 10, 1 );
function custom_calculate_price_by_city_count( $cart ) {
    // 后台访问或非结算类AJAX请求直接跳过
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
        return;
    }
    
    // 初始化空数组存储唯一city分类名称,利用数组键名唯一特性自动去重
    $unique_cities = [];
    
    // 遍历购物车商品收集所有关联的city分类
    foreach ( $cart->get_cart() as $cart_item ) {
        $product_id = $cart_item['product_id'];
        $term_names = wp_get_post_terms( $product_id, 'city', array( 'fields' => 'names' ) );
        
        if ( ! empty( $term_names ) && is_array( $term_names ) ) {
            foreach ( $term_names as $term_name ) {
                $unique_cities[ $term_name ] = 1;
            }
        }
    }
    
    // 统计唯一city数量,无匹配分类时默认值为1避免总价归零
    $city_count = count( $unique_cities ) ?: 1;
    
    // 方案1:修改每个商品单价实现总价倍增
    foreach ( $cart->get_cart() as $cart_item ) {
        $original_price = $cart_item['data']->get_price();
        $cart_item['data']->set_price( $original_price * $city_count );
    }

    // 方案2:如果不需要修改商品单价,仅整体调整总价,可注释方案1的代码,使用下方添加费用的逻辑
    // $original_total = $cart->subtotal;
    // $extra_fee = $original_total * ($city_count - 1);
    // $cart->add_fee( '城市分类附加费用', $extra_fee );
}

代码说明

  • 已兼容单个商品关联多个city分类的场景,会自动全量收集并去重
  • 代码可直接添加到当前主题的functions.php文件,或自定义插件的代码文件中即可生效
  • 可根据业务需要选择修改商品单价或者添加附加费用的实现方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:24:03