WooCommerce挂钩从管理器创建订单

问题描述:

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

我想:

  • woocommerce_new_order
  • woocommerce_thankyou
  • woocommerce_checkout_order_processed
  • woocommerce_checkout_update_order_meta

更新

最后,我用这个:

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是:不执行

function validate_order($order_id) 
{ 
    $order = new \WC_Order($order_id); 
    $user_meta = get_user_meta($order->get_user_id()); 
    if($user_meta) 
     return true; 
    return false; 
} 

由于validate_order的动作,当你开始创建订单。我使用!did_action('woocommerce_checkout_order_processed'),因为如果订单是由客户创建的,我不希望执行该操作(我有一个具体操作,使用woocommerce_checkout_order_processed)。

+0

这应该有希望得到它:'WC() - > order-> id;' – stevenkellow

如果您使用管理页面.../wp-admin/post-new.php?post_type=shop_order来创建新订单,那么可能不会有WooCommerce钩子来执行此操作,因为此订单由WordPress核心创建。

但是,WordPress动作'save_post_shop_order'将与$post_ID这是订单ID调用。

参见功能wp_insert_post()...\wp-includes\post.php

+0

谢谢!订单创建时以及每次更新订单时都会调用save_post_shop_order行为。这对我来说几乎是好事,但是有没有一种行为只有在创建订单时才会被调用? (可能是'... \ wp-includes \ post.php'中的'{$ new_status} _ {$ post-> post_type}',但'new_shop_order'不起作用) – Vixent

+0

'save_post_shop_order'操作有一个布尔参数$ update将在创建后创建。 –

+0

好的。问题是,当你点击按钮来从admin创建订单时,在你开始填写订单字段之前,调用save_post_shop_order行动。所以我得到一个空订单的订单ID。实际上,如果您从订单创建页面退出,并尝试创建新订单,那么订单ID是一个新值。只有当管理员点击按钮“保存/添加订单”并且订单显示在订单表格中时,才会使用仅被调用的操作。 – Vixent

您可以使用此钩子woocommerce_process_shop_order_meta是在从WordPress管理员手动创建订单时触发的。