WooCommerce中自动修改预售订单状态的技术需求
WooCommerce 预售订单自动切换自定义状态实现方案
我目前使用两款插件管理预售商品:
- Custom Order Status Pro:创建WooCommerce默认状态之外的自定义订单状态(已配置
Preorder状态) - Product Pre-Orders for WooCommerce:为缺货商品提供独立的加购及追踪机制,替代WooCommerce默认补货功能
当前订单流程是提交后短暂处于processing状态,支付确认后自动变为completed,需要实现自动识别含预售商品的订单,并将其状态更新为自定义的Preorder状态。
实现代码
/** * 自动将含预售商品的订单切换至自定义Preorder状态 */ add_action( 'woocommerce_order_status_completed', 'switch_preorder_order_to_custom_status', 10, 3 ); add_action( 'woocommerce_order_status_processing', 'switch_preorder_order_to_custom_status', 10, 3 ); function switch_preorder_order_to_custom_status( $order_id, $old_status, $new_status ) { // 获取订单对象 $order = wc_get_order( $order_id ); if ( ! $order ) return; $has_preorder_item = false; // 遍历订单商品,检查是否存在预售商品 foreach ( $order->get_items() as $item ) { $product = $item->get_product(); if ( ! $product ) continue; // 适配Product Pre-Orders for WooCommerce的预售判断方法 if ( method_exists( $product, 'is_pre_order' ) && $product->is_pre_order() ) { $has_preorder_item = true; break; } } // 切换至自定义预售状态(确保slug与你创建的状态一致) if ( $has_preorder_item && ! $order->has_status( 'preorder' ) ) { $order->update_status( 'preorder', '订单包含预售商品,自动切换至预售状态', true ); } }
使用说明
- 将代码添加到主题的
functions.php文件,或通过Code Snippets等自定义代码插件导入 - 确认Custom Order Status Pro创建的自定义状态slug为
preorder,若你的状态slug不同,需修改代码中对应的'preorder'字符串 - 代码会在订单进入
processing或completed状态时自动触发检查,符合条件则切换状态
内容的提问来源于stack exchange,提问作者rabiancone
相关产品推荐
相关产品推荐

