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
相关产品推荐
相关产品推荐

