2016-07-09 40 views
1

我嘗試從其中一個訂單項ID獲取相關訂單(訂單ID)。例如Woocommerce從item_id的其中一個獲取order_id?

一種情況: 當編輯命令和刪除訂單項(Ajax的完成)的Woocommerce只提供鉤"woocommerce_before_delete_order_item"和僅通過$item_id。 (woo函數執行sql而不是WP環境)。我需要「歸屬」的訂單ID做出一些行動!

到目前爲止,我的解決方案是遍歷所有訂單並比較項目ID,以及匹配發生時的中斷和退貨訂單ID。

當在當前店鋪中保持10000個訂單以及更多活動時,這是減慢或「笨重笨拙」的方式。

這不起作用:

wp_get_post_parent_id ($item_id)

但是我希望有一個類似的呼籲,或者我需要做一個DB SQL搜索?任何涉及mySQL的回答,請使其「複製並粘貼就緒」。我很擅長PHP,但不處理或從不寫我自己的SQL。

感謝您的幫助!下面是我的解決方案至今:

$order_id = my_wc_get_order_from_item_id($item_id); 

function my_wc_get_order_from_item_id($id) { 

    $orders = get_posts('post_type=shop_order&numberposts=-1&post_status=publish'); 
    foreach($orders as $obj) { 
     $order = new WC_Order($obj->ID); 
     if (count($order->get_items('line_item')) > 0) { 
      foreach($order->get_items('line_item') as $item_id => $item) { 
       if($item_id == $id) $return_value = $obj->ID; 
       if(isset($return_value)) break; 
      } 
     } 
     unset($order); 
     if(isset($return_value)) break; 
    } 

    if(isset($return_value)) return $return_value; 
     else return 0; 
} 

回答

1

你的方法沒有奏效,因爲訂購的貨品沒有在wp_posts表中的職位,所以他們不能有post_parent

但是,所有這些都不會丟失,而且比我預期的要容易,因爲我的SQL並不那麼強大。看着在數據庫中的表woocommerce_order_item你可以看到order_idorder_item_id都是有:woocommerce_order_item table

所以我借了WooCommerce一點點的SQL語句,並修改它找給特定order_item_idorder_id。讓我知道這是如何工作的。

function so_38286531_get_order_item_order_id($item_id) { 
    global $wpdb; 

    $order_id = $wpdb->get_var($wpdb->prepare(
     "SELECT order_id FROM {$wpdb->prefix}woocommerce_order_items 
     WHERE order_item_id = %d", 
     $item_id 
    )); 

    return $order_id; 
} 
+0

優:https://docs.woothemes.com/wc-apidocs/source-class-WC_Abstract_Order.html#1239 – LoicTheAztec

+0

謝謝!什麼是鏈接?行號指向「line_tax」,這似乎與此問題/答案無關。 – helgatheviking

+0

顯然,它們在WC API DOCS上的行號有問題。因爲如果你看我的網址是指向1239行,但它顯示行1277 ...行1239是非常類似於你的代碼,並與get_items()函數 – LoicTheAztec

相關問題