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

如何在WooCommerce中实现购物车总额超25欧元时自动添加默认订单备注

解决WooCommerce购物车总额超25欧元自动添加默认订单备注的问题

首先来说说你之前代码出错的原因:你用了woocommerce_checkout_fields这个过滤器,但它只接收$fields这一个参数,可你给函数定义了两个参数$order, $fields,这就导致PHP抛出了参数数量不足的致命错误。而且这个钩子阶段还没有生成订单对象,我们得从购物车获取总额才对。

下面给你两种符合需求的实现方案,你可以根据实际需要选择:

方案一:预填充结账页面的订单备注字段(用户可见可修改)

这个方案会在用户结账时,自动给订单备注框填上默认内容,用户可以看到也能修改它:

add_filter( 'woocommerce_checkout_fields', 'set_default_order_comment_based_on_cart_total' );
function set_default_order_comment_based_on_cart_total( $fields ) {
    // 获取当前购物车的总额(带货币符号的字符串,比如"€29.99")
    $cart_total = WC()->cart->get_cart_total();
    // 把字符串转成纯数值,方便比较
    $cart_total_amount = (float) preg_replace('/[^0-9.]/', '', $cart_total);

    // 判断购物车总额是否超过25欧元
    if ( $cart_total_amount > 25 ) {
        // 设置订单备注的默认值
        $fields['order']['order_comments']['default'] = 'Custom note!!';
    }

    return $fields;
}

方案二:自动添加管理员可见的订单备注(用户不可见)

如果你的需求是给后台添加一条只有管理员能看到的自动备注,不管用户有没有修改前台的备注,就用这个钩子:

add_action( 'woocommerce_checkout_create_order', 'add_admin_order_note_for_high_total' );
function add_admin_order_note_for_high_total( $order ) {
    // 获取订单总额(这里直接用订单对象的方法,已经是数值类型)
    $order_total = $order->get_total();
    
    if ( $order_total > 25 ) {
        // 添加内部备注(第二个参数true表示仅管理员可见)
        $order->add_order_note( '自动添加:订单总额超过25欧元', true );
    }
}

小提示

  • 如果你既想让用户看到预填充的备注,又想给后台加一条管理员备注,可以同时使用上面两个函数。
  • 注意货币符号的处理:方案一里因为get_cart_total()返回的是带格式的字符串,所以我们用正则转成了纯数值,确保比较的准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:07:38