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

WooCommerce中为拍卖产品添加固定手续费与百分比佣金问题求助

WooCommerce拍卖产品费用计算问题修复

原代码存在的问题

  • 变量名不匹配:函数接收的参数是$cart,但代码里错误用了未定义的$cart_object,直接导致循环和费用计算逻辑完全失效。
  • 逻辑不符合需求:原代码只要找到一个拍卖产品就停止循环,还按整个购物车总价算15%佣金、只加一次20美元固定费,完全不满足“每个拍卖产品分别计算15%佣金+20美元固定费”的要求。
  • 变量初始化错误:把费用变量初始化为空字符串(''),后续数值计算会出现类型错误。
  • 页面判断过严:is_checkout() && !is_wc_endpoint_url()会排除结账流程里的某些端点,可能导致费用无法正常显示。

修正后的代码

add_action( 'woocommerce_cart_calculate_fees', 'commission_and_fees', 10, 1 );
function commission_and_fees( $cart ) {
    // 后台非AJAX请求直接返回
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
    // 未登录用户不添加费用
    if ( ! is_user_logged_in() ) return;

    $total_auction_fees = 0;

    // 遍历所有购物车商品
    foreach ( $cart->cart_contents as $item ) {
        // 判断当前商品是否为拍卖类型
        if ( $item['data']->is_type( 'auction' ) ) {
            // 获取当前拍卖产品的成交价格
            $item_price = $item['data']->get_price();
            // 计算单个商品的15%佣金
            $commission = $item_price * 0.15;
            // 累加单个商品的佣金+固定手续费
            $total_auction_fees += $commission + 20;
        }
    }

    // 有拍卖产品且总费用大于0时,添加费用到购物车
    if ( $total_auction_fees > 0 ) {
        $cart->add_fee( '拍卖服务费(每件15%佣金 + $20固定手续费)', $total_auction_fees, true );
    }
}

关键修正说明

  • 统一变量名:全程使用函数参数$cart,确保能正常调用购物车对象的方法。
  • 逐个商品计费:遍历所有购物车商品,对每个拍卖产品单独计算费用并累加,完全匹配需求。
  • 修正变量类型:把总费用初始化为数值0,避免字符串和数值混合计算的错误。
  • 放宽页面限制:移除过于严格的结账页面判断,确保购物车、结账等页面都能正常显示费用(如果只需要在结账页面显示,可重新添加if ( ! is_checkout() ) return;)。
  • 正确获取成交价:用get_price()获取拍卖产品的最终成交价格,适配WooCommerce拍卖插件的常规价格获取逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:23:16