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

WooCommerce属性折扣适配:让简单产品支持满6件15%优惠

WooCommerce 带指定属性商品满件折扣修复(支持简单+变体产品)

原代码仅对带flaske属性的可变产品(变体)生效,无法覆盖同属性的简单产品。问题出在仅遍历购物车项的variation数组——简单产品没有该数组,因此被排除在外。以下是修复后的代码,同时支持两类产品:

// 针对带指定属性的商品,满6件及以上应用15%折扣
add_action( 'woocommerce_cart_calculate_fees','wc_cart_item_quantity_discount' );
function wc_cart_item_quantity_discount( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // 初始化变量
    $min_total_quantity = 6; // 触发折扣的最低累计数量
    $discount = $items_count = $percent = $items_subtotal = 0;
    $taxonomy   = 'pa_variant'; // 属性分类
    $target_term = 'flaske'; // 目标属性值

    // 遍历购物车所有商品
    foreach( $cart->get_cart() as $cart_item ) {
        $product = $cart_item['data'];
        $has_target_attribute = false;

        // 处理变体产品:检查变体属性
        if ( $product->is_type('variation') ) {
            foreach( $cart_item['variation'] as $attribute => $term_slug ) {
                if( $attribute === 'attribute_'.$taxonomy && $term_slug === $target_term ) {
                    $has_target_attribute = true;
                    break;
                }
            }
        }
        // 处理简单产品:直接获取产品属性
        elseif ( $product->is_type('simple') ) {
            $attribute_value = $product->get_attribute($taxonomy);
            if ( $attribute_value === $target_term ) {
                $has_target_attribute = true;
            }
        }

        // 如果商品符合属性要求,累计数量和小计
        if ( $has_target_attribute ) {
            $items_count += $cart_item['quantity'];
            $items_subtotal += $cart_item['line_subtotal'];
        }
    }

    // 累计数量达标时设置折扣比例
    if ( $items_count >= $min_total_quantity ) {
        $percent = 15;
    }

    // 添加折扣费用(含税)
    if( $percent > 0 ) {
        $discount_amount = -($items_subtotal / 100) * $percent;
        $cart->add_fee( __( "Mix & Match 折扣 - $percent%", "woocommerce" ), $discount_amount, true);
    }
}

修改关键点说明:

  • 修正逻辑错误:移除了原代码中错误的「商品单价≥6」判断,改为按需求累计符合属性要求的商品总数量
  • 新增简单产品支持:通过get_attribute()方法直接获取简单产品的指定属性值,判断是否符合要求
  • 分类处理产品类型:分别针对变体、简单产品做属性检查,确保两类产品都能被识别
  • 优化折扣触发条件:只有当累计数量达标时才计算折扣,避免无效的费用添加

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:32:51