订单后,woocommerce挂钩



当我通过管理员(例如其地址或自定义元字段(更改某人的订单时,我可以使用钩子吗?我阅读了此问题,但不幸的是,在保存订单之前,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

相关内容

  • 没有找到相关文章

最新更新