订单更新后的WooCommerce挂钩?

时间:2018-03-27 10:43:21

标签: php wordpress woocommerce hook-woocommerce orders

当我通过管理员(例如他们的地址或自定义元字段)更改某人的订单时,是否可以使用钩子?我read this question但不幸的是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()永远不会被命中,因为脚本总是获取新保存的值。

1 个答案:

答案 0 :(得分:2)

很抱歉,保存订单后woocommerce_checkout_update_order_meta被解雇 ...请参阅WC_Checkout create_order() method中的此摘录源代码:

// 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您可以获取已保存的订单数据

  • WC_Order参数中检索$order_id对象并使用其上的所有方法。
  • 或使用get_post_meta() on $order_id参数将数据保存在wp_postmeta数据库表中。

然后,您可以使用update_post_meta()功能...

更新数据
  

您甚至可以在保存数据之前使用woocommerce_checkout_create_order ...

您将能够使用$order类的所有可用方法(CRUD getters方法)从WC_Order参数获取数据。

您将能够使用CRUD设置器方法更改此数据并保存...

Some examples in stackOverFlow

如果您需要在订单处理后执行此操作,则可以使用以下挂钩:

  • woocommerce_new_order(关于新创建的订单活动)
  • woocommerce_thankyou(已收到订单)
  • woocommerce_order_status_changed(关于订单状态更改事件)

可能还有其他人......

要在后端保存订单时更改数据,您将使用包含3个参数的 save_post_shop_order $post_id$post和{{1} } ...