2015-04-30 14 views
11

मेरे पास एक डिजिटल उत्पाद है जो मात्रा और मूल्य द्वारा वर्णित है, लेकिन इसे पूरी तरह निर्दिष्ट करने के लिए 3 और संख्याओं की भी आवश्यकता है (यूनिक्स तिथियां, आदि)। समस्या: मैं इन नंबरों को कार्ट में कैसे प्राप्त करूं?Woocommerce: मैं कार्ट आइटम में मेटाडेटा कैसे जोड़ूं?

जहां तक ​​मेरा, इस संभाल करने के लिए 2 संभव तरीके हैं देख सकते हैं:

  1. एक उत्पाद विविधता
  2. एक उत्पाद कस्टम फ़ील्ड

यह रूपों की तरह दिखता है केवल संभाल कर सकते हैं एक सीमित सीमा (यानी लाल/पीला/हरा, एस/एम/एल, आदि) के साथ मूल्य अलग करें, और तिथियों की तरह सामान्य पूर्णांक को संभाल नहीं सकते हैं। यह कस्टम फ़ील्ड छोड़ देता है। मुझे लगता है कि मैं कह रहा हूं कि कस्टम फ़ील्ड उत्पाद पोस्ट पेज पर सामान्य मेटा डेटा हैं, इसलिए मैं उन्हें get_post_meta और update_post_meta से संभाल सकता हूं।

इसलिए, यदि मैं कस्टम फ़ील्ड के लिए जाता हूं, तो मैं ऑर्डरिंग के दौरान उत्पाद पृष्ठ फ़ील्ड अपडेट कर दूंगा, और फिर मैं चेकआउट के दौरान फ़ील्ड को वापस पढ़ूंगा, जब WC_Order बनाया गया है, और फ़ील्ड को नए ऑर्डर में जोड़ें। हालांकि, यह काम नहीं करेगा। मैं उत्पाद पृष्ठ पर मेटाडेटा नहीं बदल सकता, क्योंकि यह उत्पाद सभी ग्राहकों के लिए वैश्विक है, और यह ऑपरेशन अन्य ग्राहकों के साथ हस्तक्षेप करेगा। दूसरे शब्दों में, आप किसी उत्पाद में ऑर्डर-विशिष्ट जानकारी संग्रहीत नहीं कर सकते हैं, इसलिए इनमें से कोई भी विकल्प काम नहीं करेगा।

तो, कैसे मैं अस्थायी उत्पाद मेटाडेटा स्टोर और (WC_Cart और WC_Order के बीच यानी।) आदेश और चेकआउट चरणों के बीच इसे पारित करते हैं?

एक विकल्प इसे उपयोगकर्ता मेटाडाटा (या सत्र डेटा के रूप में) के रूप में स्टोर करना होगा, लेकिन एक बेहतर तरीका होना चाहिए - कोई विचार?

उत्तर

12

सत्र डेटा के साथ ऐसा करना आसान हो जाता है। आप कार्ट में कोई आइटम जोड़ रहे हैं जब अपने सभी अतिरिक्त मेटा डेटा (add_to_cart_action के लिए स्रोत देखें) आप एक सत्र चर बनाने, युक्त

WC()->session->set(
    'my_session_var_name', 
    array(
     'members' => $members, 
     'start' => $start, 
     'expiry' => $expiry, 
     'etc'  => $etc)); 

उपयोगकर्ता द्वारा चेक आउट करने के दौरान, गाड़ी डेटा गायब हो जाता है, और एक नया आदेश बनाया गया है। आपको मेटा डेटा को सत्र मेटा डेटा जोड़ने के woocommerce_add_order_item_meta में हुक कर सकते हैं:

add_action(
    'woocommerce_add_order_item_meta', 'hook_new_order_item_meta', 10, 3); 

function hook_new_order_item_meta($item_id, $values, $cart_item_key) { 
    $session_var = 'my_session_var_name'; 
    $session_data = WC()->session->get($session_var); 
    if(!empty($session_data)) 
     wc_add_order_item_meta($item_id, $session_var, $session_data); 
    else 
     error_log("no session data", 0); 
} 

यह है कि। आपको यह पता लगाना होगा कि आदेश मेटाडेटा कैसे प्राप्त करें और इसके साथ कुछ उपयोगी कैसे करें। आप हुक से woocommerce_before_cart_item_quantity_zero, और woocommerce_cart_emptied में सत्र डेटा को साफ़ करना भी चाह सकते हैं। Gist here है जिसके लिए इसके लिए कुछ उदाहरण कोड है।

+2

'woocommerce_add_order_item_meta' depracated है: https://docs.woothemes.com/wc-apidocs/function-woocommerce_add_order_item_meta.html हो सकता है कि' wc_add_order_item_meta' इस्तेमाल किया जा सकता: https://docs.woothemes.com/wc- apidocs/function-wc_add_order_item_meta.html –

+0

@ HarkályGergő फ़ंक्शन को बहिष्कृत किया गया है, हुक अभी भी उपयोग किया जा सकता है। – user4493177

+0

अब हुक भी बहिष्कृत है। अब woocommerce_new_order_item' का उपयोग किया जाना चाहिए। – Silentdrummer

संबंधित मुद्दे