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

Woocommerce实现购物车同时含Drinks和Bundles分类时添加折扣费用

问题原因

你现有代码的逻辑是只要购物车中出现Drinks或Bundles任意一个分类的商品,就直接把折扣金额赋值为-1,没有验证两个分类是否同时存在,所以和需求不符。

修改思路

新增两个布尔标识,分别记录两个分类是否都在购物车中存在,遍历完全部商品后,只有两个标识同时为真时才触发折扣。

修改后完整代码
add_action( 'woocommerce_cart_calculate_fees','custom_pcat_fee', 20, 1 );
function custom_pcat_fee( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    $has_drinks = false;
    $has_bundles = false;
    $fee_amount = -1;

    // 遍历购物车商品,分别标记两个分类是否存在
    foreach( $cart->get_cart() as $cart_item ){
        if( has_term( 'drinks', 'product_cat', $cart_item['product_id']) ){
            $has_drinks = true;
        }
        if( has_term( 'bundles', 'product_cat', $cart_item['product_id']) ){
            $has_bundles = true;
        }
    }

    // 只有两个分类同时存在时才添加折扣
    if ( $has_drinks && $has_bundles ){
        WC()->cart->add_fee( __( "Kombucha Bundle Discount", "woocommerce" ), $fee_amount, false );
    }
}
核心调整点
  • 移除了原来单次匹配到任意分类就赋值折扣的逻辑,改为分别统计两个分类的存在状态
  • 遍历结束后新增了两个分类同时存在的判断,只有满足条件才触发折扣添加

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:36:07