当我通过管理员(例如其地址或自定义元字段(更改某人的订单时,我可以使用钩子吗?我阅读了此问题,但不幸的是,在保存订单之前,woocommerce_process_shop_order_meta
是触发的,这意味着我无法访问新更新的数据。我需要的是能够使用保存到订单的新数据。
更新:使用save_post_shop_order
的问题是,在击中元之前已更新元,因此我无法比较以前保存的元值,例如:
$metaArray = $_POST['meta'];
foreach($metaArray as $meta => $key) {
$metaArr[$key["key"]] = $key["value"];
}
$meta = get_post_meta($order->ID);
if($meta['coverstart'][0] != $metaArr['coverstart']) {
die("COVER START DATE HAS CHANGED");
}
die()
永远不会被击中,因为脚本总是获得新保存的值。
对不起,但是 woocommerce_checkout_update_order_meta
保存订单后…请参阅WC_Checkout
create_order()
中的此提取源代码:
// Save the order.
$order_id = $order->save(); // <== Order is saved here before
do_action( 'woocommerce_checkout_update_order_meta', $order_id, $data ); <== // The hook
return $order_id;
因此,在woocommerce_checkout_update_order_meta
中,您可以获取保存的订单数据:
- 通过从
$order_id
参数检索WC_Order
对象并使用其上的所有方法。 - 或与
$order_id
参数一起使用get_post_meta()
以获取在wp_postmeta
数据库表中保存的数据。
然后,您可以使用update_post_meta()
功能更新数据…
您甚至可以在保存数据之前使用
woocommerce_checkout_create_order
…
您将能够使用WC_Order
类的所有可用方法(crud Getters方法(从$order
参数获取数据。
您将能够使用Crud Setters方法更改此数据并保存它…
stackoverflow中的一些示例
如果您需要在订单过程后执行此操作,则使用的挂钩可以是:
-
woocommerce_new_order
(在新创建的订单事件上( -
woocommerce_thankyou
(在接收到的订单上( -
woocommerce_order_status_changed
(在订单状态更改事件(
,可能是其他一些……
要在后端保存订单时更改数据,您将使用具有3个参数的 save_post_shop_order
:$post_id
,$post
和$update
…