在 WooCommerce 中创建订单之前触发的最后一个钩子是什么?

What is the last hook triggered before an order is created in WooCommerce?

我正在尝试在允许下订单之前验证购物车的内容。使用 woocommerce_checkout_process 动作挂钩等常见挂钩,这似乎是一项微不足道的任务,在大多数情况下都可以正常工作。

在我正在处理的网站中,似乎有一些复杂的情况,其他插件正在编辑购物车的内容,因此上述挂钩是不够的。

我想知道在数据库中创建订单之前以及完成任何付款之前调用的最后一个钩子是什么。我想确保我 运行 在进行任何潜在更改后进行验证以避免不必要的订单。

我四处看了看:https://woocommerce.github.io/code-reference/hooks/hooks.html 使用关键字 order 进行搜索,但结果很多。

我已经确定(我猜)the create() function 其中包含钩子 woocommerce_new_order_item 但这个是在创建之后而不是之前调用的。

哪个钩子将确保在我的验证和创建订单之间没有进行任何更改?

订单创建前的最后一个挂钩是 woocommerce_checkout_create_order located in WC_Checkout method create_order() 如您所见,订单是在该挂钩之后创建的,代码行:

$order->save();

对于订单商品(以下挂钩也位于WC_Checkout method create_order(),在订单创建之前)

  • “行”项使用 woocommerce_checkout_create_order_line_item 过滤器挂钩。
  • “费用”项使用 woocommerce_checkout_create_order_fee_item 过滤器挂钩。
  • “运输”项目使用 woocommerce_checkout_create_order_shipping_item 过滤器挂钩。
  • “税”项使用 woocommerce_checkout_create_order_tax_item 过滤器挂钩。
  • “优惠券”项目使用 woocommerce_checkout_create_order_coupon_item 过滤器挂钩。

现在 对于字段验证,您可以使用位于 WC_Checkout class:

中的 2 个不同的钩子