2018年的方式:
建立在Guido WP答案上,您可以woocommerce_checkout_create_order
在更轻量级和更有效的版本代码中使用动作挂钩(使用WC 3+ CRUD 方法):
add_action('woocommerce_checkout_create_order', 'before_checkout_create_order', 20, 2);
function before_checkout_create_order( $order, $data ) {
$order->update_meta_data( '_custom_meta_key', 'value' );
}
代码位于您的活动子主题(或活动主题)的 function.php 文件中。
在 WooCommerce 3+ 中测试和工作(仅限)。
一些解释:
操作挂钩只是保存订单数据之前的woocommerce_checkout_create_order
一步。请参阅下面的方法摘录WC_Checkout
create_order()
(带有两个钩子):
/**
* Action hook to adjust order before save.
* @since 3.0.0
*/
do_action( 'woocommerce_checkout_create_order', $order, $data );
// Save the order.
$order_id = $order->save();
do_action( 'woocommerce_checkout_update_order_meta', $order_id, $data );
return $order_id;
为什么要woocommerce_checkout_create_order
改用?:
- 因为你不需要使用
$order = wc_get_order( $order_id );
你已经得到$order
的作为钩子函数中的参数。
- 您不需要使用
$order->save();
,因为无论如何这将在之后完成(请参阅源代码)
- 这个钩子自 WooCommerce 版本 3 以来已经发布,它的目的是相同的,允许使用所有可用的
WC_Order
方法。
所以这只适用于函数内的一行代码。