以编程方式创建 WooCommerce 订单时设置外部订单 ID
Set an external order ID when creating programmatically a WooCommerce order
我一直在使用一些有据可查的代码以编程方式创建 Woocommerce 订单。工作得很好。此处参考:https://quadlayers.com/add-products-woocommerce/
但是我很想知道是否可以在通过脚本创建我的 WC 订单时定义 order_id(或者是 post_id?)。我 运行 我店里的这段代码,目前从一个在线市场将订单导入 Woocommerce,那里的订单已经有一个订单号,我很想通过这个 hack 删除交叉引用,并传递WC 的现有订单号。
这是我所拥有的粗略概念;
$insert_marketplace_order_id = 1234567890;
$order = wc_create_order();
$order->set_order_id($insert_marketplace_order_id);
$order->set_date_created($date_here);
$order-> etc. etc.
$order->save();
我显然已经四处搜索,不幸的是,插件的存在 - 似乎是所有 Google 都知道的 - 没有帮助。
虽然“set_order_id”可以解决问题,但我放置它的位置可能存在问题。还有其他想法吗?
在 WooCommerce 中,订单 ID 是 post ID,因此您无法像您尝试的那样插入外部参考 ID。 WooCommerce 订单是自定义 post 类型,订单 ID(post Id)是根据 post 数据库中使用的最后一个 post Id 生成的 table…
现在您可以使用 the filter hook woocommerce_order_number
设置 订单号 ,将您自己的订单参考号 设置为订单号 ,这不是 WooCommerce 订单 ID (post 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 文件。
Now when using the WC_Order
method get_order_number()
WooCommerce will get/display the correct order number.
注意: 因为你不使用任何带有 wc_create_order()
function 的参数,所以最好使用 $order = new WC_Order();
来代替,这会给出一个空的 WC_Order
不使用 save()
方法 2 次的实例对象 (轻得多).
相关:
我一直在使用一些有据可查的代码以编程方式创建 Woocommerce 订单。工作得很好。此处参考:https://quadlayers.com/add-products-woocommerce/
但是我很想知道是否可以在通过脚本创建我的 WC 订单时定义 order_id(或者是 post_id?)。我 运行 我店里的这段代码,目前从一个在线市场将订单导入 Woocommerce,那里的订单已经有一个订单号,我很想通过这个 hack 删除交叉引用,并传递WC 的现有订单号。
这是我所拥有的粗略概念;
$insert_marketplace_order_id = 1234567890;
$order = wc_create_order();
$order->set_order_id($insert_marketplace_order_id);
$order->set_date_created($date_here);
$order-> etc. etc.
$order->save();
我显然已经四处搜索,不幸的是,插件的存在 - 似乎是所有 Google 都知道的 - 没有帮助。
虽然“set_order_id”可以解决问题,但我放置它的位置可能存在问题。还有其他想法吗?
在 WooCommerce 中,订单 ID 是 post ID,因此您无法像您尝试的那样插入外部参考 ID。 WooCommerce 订单是自定义 post 类型,订单 ID(post Id)是根据 post 数据库中使用的最后一个 post Id 生成的 table…
现在您可以使用 the filter hook woocommerce_order_number
设置 订单号 ,将您自己的订单参考号 设置为订单号 ,这不是 WooCommerce 订单 ID (post 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 文件。
Now when using the
WC_Order
methodget_order_number()
WooCommerce will get/display the correct order number.
注意: 因为你不使用任何带有 wc_create_order()
function 的参数,所以最好使用 $order = new WC_Order();
来代替,这会给出一个空的 WC_Order
不使用 save()
方法 2 次的实例对象 (轻得多).
相关: