在 WooCommerce 中,订单 ID 是帖子 ID,因此您无法像您尝试那样插入外部引用 ID。 WooCommerce 订单是自定义帖子类型,订单 ID(帖子 ID)是根据上次使用的帖子 ID 生成的wp_posts
数据库表...
现在你可以设置订单号 using 过滤钩woocommerce_order_number https://github.com/woocommerce/woocommerce/tree/4.7.0/includes/class-wc-order.php#L480, 设置您自己的订单参考号作为订单号,这不是 WooCommerce 订单 ID(帖子 ID).
所以你的代码将是:
$insert_marketplace_order_id = 1234567890;
$order = new WC_Order();
$order->set_date_created($date_here);
// $order-> etc. etc.
$order->update_meta_data('_order_number', $insert_marketplace_order_id); // <== Here
$order->save();
然后,您将添加以下挂钩函数,以便能够获取并显示正确的订单号:
add_filter( 'woocommerce_order_number', 'wc_set_order_number', 10, 2 );
function wc_set_order_number( $order_id, $order ) {
// Get the order number (custom meta data)
$order_number = $order->get_meta('_order_number');
return empty($order_number) ? $order_id : $order_number;
}
代码位于活动子主题(或活动主题)的functions.php 文件中。
现在当使用WC_Order
method get_order_number()
WooCommerce 将获取/显示正确的订单号。
Note:因为你不使用任何参数wc_create_order()功能 https://github.com/woocommerce/woocommerce/blob/4.7.0/includes/wc-core-functions.php#L76-L139更好用$order = new WC_Order();
相反,这给出了一个空的WC_Order
不使用实例对象save()
方法2次(轻了很多).
Related: 基于付款方式的动态自定义订单号 https://stackoverflow.com/questions/63545576/dynamic-custom-order-numbers-based-on-payment-method/63910184#63910184