WooCommerce输入物流跟踪号时自动更新订单状态为已完成的实现方案
实现方案
替换官方示例中下单完成触发的钩子,使用WooCommerce Shipment Tracking插件专属的跟踪信息添加钩子触发订单状态更新即可,完整实现代码如下:
/** * 给订单添加物流跟踪信息时自动更新订单状态为已完成 */ add_action( 'woocommerce_shipment_tracking_added_tracking_item', 'custom_update_order_status_when_add_tracking', 10, 2 ); function custom_update_order_status_when_add_tracking( $order_id, $tracking_item ) { // 过滤无效订单ID if ( ! $order_id ) { return; } $order = wc_get_order( $order_id ); // 仅对有效且处于处理中/暂停状态的订单执行状态更新,可根据业务需求调整允许更新的状态列表 if ( $order && in_array( $order->get_status(), [ 'processing', 'on-hold' ] ) ) { $order->update_status( 'completed' ); } }
代码说明
- 绑定的
woocommerce_shipment_tracking_added_tracking_item是插件官方预留的动作钩子,会在每一次给订单新增物流跟踪信息时自动触发,自动传入订单ID和当前新增的跟踪项数据两个参数 - 代码中增加了订单状态判断逻辑,避免覆盖退款、取消等异常状态的订单
- 如果你需要在修改已有跟踪信息时也触发状态更新,可额外添加一行钩子绑定代码:
add_action( 'woocommerce_shipment_tracking_updated_tracking_item', 'custom_update_order_status_when_add_tracking', 10, 2 ); - 如果需要自定义更新的订单状态,只需把
update_status方法里的completed替换为对应状态标识即可
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

