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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:45:36