Php 用于从管理员创建订单的WooCommerce钩子

Php 用于从管理员创建订单的WooCommerce钩子,php,woocommerce,hook-woocommerce,Php,Woocommerce,Hook Woocommerce,在我的自定义插件(在WooCommerce 2.6.x和3.x中工作)中,我需要在创建新订单时获取订单ID。我尝试了不同的钩子,但它们只在客户创建订单时有效,而在从管理员创建订单时无效 我试过: 新订单 谢谢 woocommerce\u结帐\u订单\u已处理 woocommerce\u结帐\u更新\u订单\u元 更新 最后我用了这个: add_action('wp_insert_post', function($order_id) { if(!did_action('woocomme

在我的自定义插件(在WooCommerce 2.6.x和3.x中工作)中,我需要在创建新订单时获取订单ID。我尝试了不同的钩子,但它们只在客户创建订单时有效,而在从管理员创建订单时无效

我试过:

  • 新订单
  • 谢谢
  • woocommerce\u结帐\u订单\u已处理
  • woocommerce\u结帐\u更新\u订单\u元
更新

最后我用了这个:

add_action('wp_insert_post', function($order_id)
{
    if(!did_action('woocommerce_checkout_order_processed') 
        && get_post_type($order_id) == 'shop_order'
        && validate_order($order_id))
    {
         order_action($order_id);
    }
});
其中,验证顺序为:


感谢validate_order,当您开始创建订单时,不会执行该操作。我使用
!did_action(“woocommerce_checkout_order_processed”)
,因为如果订单是由客户创建的,我不希望执行该操作(我有一个特定的操作,使用
woocommerce_checkout_order_processed

但是,WordPress操作
'save\u post\u shop\u order'
将使用订单ID调用
$post\u ID


请参阅
中的函数
wp\u insert\u post()
。\wp includes\post.php

您可以使用此钩子
woocommerce\u流程\u shop\u order\u meta
在从WordPress admin手动创建订单时触发。

创建订单后调用woocommerce\u new\u order
钩子:

add_action('woocommerce_new_order', function ($order_id) {
    // ...
}, 10, 1);

这应该能帮你得到它:
WC()->order->id谢谢!创建订单和每次更新订单时,都会调用操作
save\u post\u shop\u order
。这对我来说几乎是好事,但是是否有一个操作只有在创建订单时才会被调用?(可能是
{$new\u status}{$post->post\u type}
中的
..\wp includes\post.php
,但是
new\u shop\u order
不起作用)操作“save\u post\u shop\u order”有一个布尔参数$update,该参数在创建后将为false。Ok。问题是,当您单击“从管理员创建订单”按钮时,在您开始填写订单字段之前,会调用操作
save\u post\u shop\u order
。所以我得到一个空订单的订单ID。事实上,如果您退出订单创建页面,并尝试创建新订单,则订单ID是一个新值。最好只在管理员单击“保存/添加订单”按钮并在订单表中显示订单时使用调用的操作。另一个问题,仅在WooCommerce 3.x中,使用
Save\u post\u shop\u Order
即使管理员单击按钮保存订单,订单也不完整,没有客户数据。只有当管理员第二次保存订单时,订单才完成。当使用管理员页面下订单时,订单分步骤完成。首先创建空订单,然后可以多次更新该订单。每个更新都可能添加或删除了项目。此外,更新可能在不同会话中的更晚时间发生。此外,可以进一步更新订单表中的现有订单。我不确定您试图做什么,但订单流程中稍后的操作/筛选可能更合适,即订单状态更改为“处理”或“完成”时。
add_action('woocommerce_new_order', function ($order_id) {
    // ...
}, 10, 1);