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

WooCommerce手动创建订单给订单号加创建日期的报错如何解决

WooCommerce后台手动创建订单报错修复方案

错误原因

你使用的代码存在三个兼容问题,刚好触发后台手动创建订单场景的异常:

  • 冗余重复获取订单对象:函数本身已经通过参数拿到了$order实例,不需要再次调用wc_get_order()获取,后台新建订单的临时状态下二次查询可能拿到空对象
  • 使用了废弃的属性调用方式:WooCommerce 3.0及以上版本禁止直接访问$order->id属性,必须调用$order->get_id()方法获取订单ID,直接访问属性会抛出错误
  • 未做创建时间判空:后台手动新建订单时,订单刚初始化还没写入数据库,get_date_created()会返回空,后续直接调用date()方法就会触发空对象报错

修复后代码

add_filter( 'woocommerce_order_number', 'change_woocommerce_order_number', 1, 2);
function change_woocommerce_order_number( $order_id, $order ) {
    $prefix = '160-';
    // 你可以在这里添加获取城市的逻辑拼接到prefix中
    $order_date = $order->get_date_created();
    // 判空处理,兼容后台新建订单的临时状态
    if ( empty($order_date) ) {
        $date_created = current_time( 'Ymd' );
    } else {
        $date_created = $order_date->date( 'Ymd' );
    }
    // 用官方推荐的get_id()方法获取订单ID
    return $prefix . $order->get_id() . '-'.$date_created;
}

修复效果说明

修复后的代码同时兼容前台正常下单、后台手动创建订单两个场景,不会再出现空对象报错,生成的订单号规则和之前完全一致。

内容的提问来源于stack exchange,提问作者Seek Vow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:06:02