2017-06-13 68 views
1

在我的自定義插件(在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

回答

1

如果您使用管理頁面.../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

0

您可以使用此鉤子woocommerce_process_shop_order_meta是在從WordPress管理員手動創建訂單時觸發的。

相關問題