如何在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
相关产品推荐
相关产品推荐

