WooCommerce订单转处理状态时按条件添加客户消息问题
解决WooCommerce添加客户可见消息的问题
问题根源
$order->set_customer_note() 是替换原有客户备注而非添加新内容,且若钩子触发时机或订单对象处理不当,也会导致设置失效。更可靠的方式是用 wc_add_order_note() 函数,明确标记备注对客户可见。
修正后的完整代码
add_action( 'woocommerce_order_status_processing', 'add_customer_multiple_packages_note', 10, 2 ); function add_customer_multiple_packages_note( $order_id, $order ) { // 指定需要检查的商品分类slug $target_categories = array( 'accessories-1', 'shirtsblue', 'shirtsred', 'shirtsgreen' ); $has_target_cat = false; $has_other_cat = false; // 遍历订单内所有商品,判断分类归属 foreach ( $order->get_items() as $item ) { $product = $item->get_product(); $product_cats = wp_get_post_terms( $product->get_id(), 'product_cat', array( 'fields' => 'slugs' ) ); if ( array_intersect( $product_cats, $target_categories ) ) { $has_target_cat = true; } else { $has_other_cat = true; } // 提前终止循环,满足条件后无需继续遍历 if ( $has_target_cat && $has_other_cat ) { break; } } // 同时包含指定分类与其他分类时,添加客户可见消息 if ( $has_target_cat && $has_other_cat ) { $customer_note = '温馨提示:您的订单包含多品类商品,将分2个包裹发出,请留意查收!'; // 添加客户可见的订单备注(替代set_customer_note的更稳定方案) wc_add_order_note( $order_id, $customer_note, true, // 标记为客户可见 false // 不自动触发邮件通知(需发邮件则设为true) ); // 若需强制替换原有客户备注(不推荐,会覆盖历史内容),可启用以下代码: // $order->set_customer_note( $customer_note ); // $order->save(); } }
关键说明
wc_add_order_note()的第三个参数设为true,可确保备注显示在客户账户的订单详情页,后台也能同步查看。- 如需给客户发送邮件通知该消息,可将第四个参数设为
true,或单独调用邮件函数:$order->send_customer_note_email( $customer_note ); - 钩子
woocommerce_order_status_processing接收$order_id和$order两个参数,直接使用传入的订单对象避免重复查询,提升效率。
内容的提问来源于stack exchange,提问作者Boggie
相关产品推荐
相关产品推荐

