2015-04-16 8 views
6

को ऑर्डर करने के लिए कस्टम मेटा जोड़ने की आवश्यकता के बजाय कौन सा हुक उपयोग करना है। इसे गुगल किया और अधिकांश लेख "woocommerce_add_order_item_meta" हुक का उपयोग करने के लिए कहते हैं। यह हुक नवीनतम संस्करण 2.3.7 में बहिष्कृत है। कोई, कृपया मुझे बताएं कि किस हुक का उपयोग करना है।Woocommerce: बहिष्कृत "woocommerce_add_order_item_meta"

http://docs.woothemes.com/wc-apidocs/function-woocommerce_add_order_item_meta.html

उत्तर

13

आप wc-deprecated-functions.php को देखें, तो आप

/** 
* @deprecated 
*/ 
function woocommerce_add_order_item_meta($item_id, $meta_key, $meta_value, $unique = false) { 
    return wc_add_order_item_meta($item_id, $meta_key, $meta_value, $unique); 
} 

असल में, समारोहwc_add_order_item_meta() को नाम दिया गया था देखेंगे, इसलिए यदि आप समारोह की जरूरत है तो उस का उपयोग करें। कार्रवाई हुक नाम दिया गया था नहीं और के रूप में class-wc-checkout.php में रहता है:

// Allow plugins to add order item meta 
do_action('woocommerce_add_order_item_meta', $item_id, $values, $cart_item_key); 
1

अपने विशिष्ट उपयोग के (आप जहाँ आप इस मेटा जानकारी जोड़ने की जरूरत है निर्दिष्ट नहीं किया है जब या) बहुत स्पष्ट नहीं है, लेकिन आप चेकआउट के दौरान woocommerce_checkout_update_order_meta उपयोग कर सकते हैं।

customizing checkout fields में और पढ़ें।

+0

हमें खेद है। मेरे पास एक कस्टम पोस्ट प्रकार "सेवा" है और जब ग्राहक सेवा प्रपत्र में भर जाता है, तो मुझे उस उत्पाद को कार्ट और पास सेवा आईडी में एक उत्पाद (योजना) जोड़ना होगा। जो मैंने पूरा कर लिया है, अब आइटम आईडी मेटा ऑर्डर करने के लिए उस आईडी को पास करना चाहते हैं। कार्ट में अन्य उत्पाद भी होंगे ... – user3339988

0

बस बातें स्पष्ट करना, इस समारोह का बहिष्कार कर रहा था, लेकिन the hook अभी भी ठीक

5

ऐसा लगता है कि हुक अब भी बहिष्कृत कर दिया गया है संस्करण 3.0.4 के रूप में। मैं इस अधिसूचना हो रही है:

The The "woocommerce_add_order_item_meta" hook uses out of date data structures and function is deprecated since version 3.0.4. Replace with woocommerce_new_order_item. 

मैं एक हमलावर प्लगइन में एक ADD_ACTION बयान में 'woocommerce_new_order_item' के साथ कार्रवाई का नाम 'woocommerce_add_order_item_meta' जगह ले ली है, और प्रतिवाद अधिसूचना गायब हो जाता है, समस्या यह है कि अब कुछ मानकों legacy_values सरणी के अंदर दिखाई दें। मैं प्लगइन YITH WooCommerce उत्पाद ऐड ऑन का उपयोग करता हूं, और उत्पाद मेटा डेटा जो ऑर्डर से जुड़ा होना चाहिए प्लगइन द्वारा नहीं उठाया जाता है और इसलिए ऑर्डर के साथ संग्रहीत नहीं किया जाता है। तो जब तक यह प्लगइन में तय नहीं किया जाता है तब तक आपको बहिष्करण अधिसूचना के साथ रहना होगा।

+0

क्षमा करें, लेकिन 'woocommerce_new_order_item'' woocommerce_add_order_item_meta' को प्रतिस्थापित नहीं करता है ... तो क्या यह एक उत्तर है? या एक प्रश्न? ... कृपया, दोनों मामलों में आपको इसे सही और परीक्षण के साथ अपडेट करना चाहिए ... या यदि नहीं तो इसे हटा दें। धन्यवाद – LoicTheAztec

+2

ठीक है, स्पष्ट होने के लिए। हुक को हटा दिया गया है और आपको एक और हुक का उपयोग करने के लिए बहिष्करण संदेश में सलाह मिलती है। लेकिन जैसा कि @LoicTheAztec कहता है, यह हुक एक आदर्श प्रतिस्थापन नहीं है, क्योंकि पैरामीटर अलग-अलग दिखाई देते हैं।तो: बहिष्करण संदेश में सलाह का पालन न करें (जब तक कि आपके पास कोड का पूरा नियंत्रण न हो)। मैं हमेशा सभी अधिसूचनाओं से छुटकारा पाने की कोशिश करता हूं, लेकिन इस मामले में मुझे इसके साथ रहना होगा –

2

मुझे पता है कि इसका उत्तर दिया गया है और पहले से ही एक स्वीकृत उत्तर है। मैं वास्तव में एक बहिष्कृत संदेश प्राप्त किए बिना इसे संभालने का एक और तरीका देना चाहता था (reference देखें);

add_action('woocommerce_new_order_item', 'saveMetaData', 10, 3); // or use just 2 instead of 3; if you don't need order id 

/** 
* Add meta to order item 
* 
* @param int $itemId 
* @param WC_Order_Item_Product|WC_Order_Item_Shipping $item 
* @param int @orderId 
*/ 
function saveMetaData($itemId, $item, $orderId) 
{ 
    if (!isItemValid($item)) 
    { 
     return; 
    } 

    wc_add_order_item_meta($itemId, 'my_custom_data', $item->legacy_values['my_custom_data']); 
} 

/** 
* @param WC_Order_Item_Product|WC_Order_Item_Shipping $item 
* 
* @return bool 
*/ 
function isItemValid($item) 
{ 
    return (
     $item instanceof WC_Order_Item_Product && 
     isset($item->legacy_values) && 
     isset($item->legacy_values['my_custom_data']) && 
     !empty($item->legacy_values['my_custom_data']) 
    ); 
} 
0

कोई ऐसा लगता है हुक की तरह भी हटा दिया गया है: पीएचपी त्रुटि: "woocommerce_add_order_item_meta" हुक तारीख डाटा संरचनाओं से बाहर का उपयोग करता है और समारोह संस्करण 3.1.2 के बाद से मान्य नहीं है। Woocommerce_new_order_item के साथ बदलें।

मैं भी इसे यहाँ नहीं मिल सकता है: https://docs.woocommerce.com/wc-apidocs/hook-docs.html