2016-07-09 4 views
1

私は、広告申込情報IDの1つから関連する注文(注文ID)を取得しようとしています。Woocommerce item_idの1つからorder_idを取得しますか?

例えば1ケース: 順序を編集し、Woocommerceのみフック"woocommerce_before_delete_order_item"を提供するのみ$item_idを通過(のAjaxによって行わ)行項目を削除します。 (woo関数はWP環境ではなくSQLを実行します)。私はいくつかのアクションを行うには、 "所属"オーダー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_id行を与えorder_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の行番号に問題があるようです。私のURLを見ると、1239行目を指していますが、1277行目を示しているので... 1239行目はあなたのコードによく似ていて、get_items()関数に関連しています – LoicTheAztec

関連する問題