2016-09-08 17 views
5

मैं का उपयोग करके Woocommerce के आदेश से आइटम मेटा मान प्राप्त करने के कोशिश कर रहा हूँ:कुछ उत्पाद मेटा डेटा प्राप्त करने के लिए आदेश आइटम आईडी कैसे प्राप्त करें?

$data = wc_get_order_item_meta($item, '_tmcartepo_data', true); 

हालांकि, मैं (get_items का उपयोग कर)

global $woocommerce, $post, $wpdb; 
$order = new WC_Order($post->ID); 
$items = $order->get_items(); 

foreach ($items as $item) { 
    $item_id = $item['order_item_id']; //??? 
    $data = wc_get_order_item_meta($item_id, '_tmcartepo_data', true); 
    $a = $data[0]['value']; 
    $b = $data[1]['value']; 
    echo $a; 
    echo $b; 
} 
पहले पैरामीटर के रूप order_item_id पाने के लिए एक तरह से नहीं मिल सकता है

और मेरा मतलब है इस आदेश ITEM_ID (1 और 2)

Order_item_id in database - Image

कैसे मुझे लगता है कि डॉन कर सकते हैं?

धन्यवाद।

उत्तर

8

2018 अद्यतन::

  • 2 संभव मामलों
  • woocommerce के लिए
  • जोड़ा गया अनुकूलता 3+

तो 2 मामलों नहीं हो सकता है के साथ जवाब स्पष्ट

1) जाओ उत्पाद मेटा डेटा (आदेश आइटम में सेट नहीं मेटा डेटा):

आप इस उत्पाद का उपयोग wil के लिए कुछ मेटाडेटा पाने के लिए एक WC_Order के लिए foreach पाश में उत्पाद आईडी प्राप्त करने के लिए की आवश्यकता होगी get_post_meta() फ़ंक्शन (लेकिन wc_get_order_item_meta())

global $post; 
$order = wc_get_order($post->ID); 
$items = $order->get_items(); 

foreach ($order->get_items() => $item) { 

    // Compatibility for woocommerce 3+ 
    $product_id = version_compare(WC_VERSION, '3.0', '<') ? $item['product_id'] : $item->get_product_id(); 

    // Here you get your data 
    $custom_field = get_post_meta($product_id, '_tmcartepo_data', true); 

    // To test data output (uncomment the line below) 
    // print_r($custom_field); 

    // If it is an array of values 
    if(is_array($custom_field)){ 
     echo implode('<br>', $custom_field); // one value displayed by line 
    } 
    // just one value (a string) 
    else { 
     echo $custom_field; 
    } 
} 

2) आदेश आइटम मेटा डेटा (कस्टम फ़ील्ड मान जाओ):

global $post; 
$order = wc_get_order($post->ID); 
$items = $order->get_items(); 

foreach ($order->get_items() as $item_id => $item) { 

    // Here you get your data 
    $custom_field = wc_get_order_item_meta($item_id, '_tmcartepo_data', true); 

    // To test data output (uncomment the line below) 
    // print_r($custom_field); 

    // If it is an array of values 
    if(is_array($custom_field)){ 
     echo implode('<br>', $custom_field); // one value displayed by line 
    } 
    // just one value (a string) 
    else { 
     echo $custom_field; 
    } 
} 

कस्टम फ़ील्ड डेटा तो

तो यहाँ

अपने कोड है एक सरणी है, आप फ़ोरैच लूप में डेटा तक पहुंच सकते हैं:

// Iterating in an array of keys/values 
foreach($custom_field as $key => $value){ 
    echo '<p>key: '.$key.' | value: '.$value.'</p>'; 
} 

सभी कोड का परीक्षण और काम किया जाता है।

संदर्भ आदेश में डेटा से संबंधित:

+0

हाय, आपकी प्रतिक्रिया के लिए धन्यवाद। हालांकि, $ item ['product_id'] केवल order_id प्राप्त कर सकता है और यह मेरे लिए सहायक नहीं है। आप ऊपर मेरी छवि देख सकते हैं (http://i.stack.imgur.com/8OJ7U.jpg)। मैं जो भी प्राप्त कर सकता हूं वह मेटा_वल्यू कॉलम (संख्या 9 0) में उत्पाद आईडी है, लेकिन मुझे जो चाहिए वह order_item_id (1 या 2) में है, इसलिए मुझे _tmcartepo_data meta_key का मान मिल सकता है। कोई उपाय? – camelot

+0

मुझे वर्तमान में "bolean पर एक सदस्य फ़ंक्शन get_items() पर कॉल करें" get_items() (WP 4.6.1 और WC 2.6.4) को कॉल करने के लिए त्रुटि। क्यों पता लगाने की कोशिश कर रहा है, लेकिन ऐसा लगता है कि आप मुझे सही दिशा में इंगित करते हैं। – camelot

0

$ आइटम सरणी/ऑब्जेक्ट की सभी सामग्री जांचने के लिए इस <pre><?php print_r($items); ?></pre> का उपयोग करें।

+0

हाय, मुझे woocommerce_order_itemmeta तालिका में सभी डेटा के साथ एक सरणी मिली है, लेकिन यह सुनिश्चित नहीं है कि मुझे आवश्यक मूल्य कैसे प्राप्त करें। मुझे नहीं पता कि इस सरणी में मेटा_की मान तक पहुंचने के लिए वैसे भी है या नहीं? – camelot

1
देर पार्टी के लिए

, लेकिन साथ ही बिंदु के साथ काम करने जा रहा है टीएम अतिरिक्त उत्पाद विकल्प प्लगइन, मुझे लगता है कि यह आपके प्रश्न का उत्तर देता है:

$order = wc_get_order($post->ID); 
$items = $order->get_items(); 


foreach($items as $item){ 
    $data = unserialize($item['item_meta']['_tmcartepo_data'][0]); 
    $a = $data[0]['value']; 
    $b = $data[1]['value']; 
    echo $a; 
    echo $b; 
} 

मेरे मामले में परीक्षण और काम करता है।

5

$order->get_items() पर फ़ोरैच करते समय, उनकी कुंजी वास्तव में ऑर्डरलाइन आईडी है। तो:

foreach ($order->get_items() as $key => $item) { 
    $data = wc_get_order_item_meta($key, '_tmcartepo_data'); 
    ... 
} 
0
foreach ($order->get_items() as $key => $item) { 
$data = wc_get_order_item_meta($key, '_tmcartepo_data'); 
... 

यह समाधान मेरे लिए लायक था, परिवर्तन "_tmcartepo_data" अपने meta_key के लिए।

0

डेटाबेस से ऑर्डर आइटम प्राप्त करने का एक आसान तरीका;

/** 
* @param $order_id 
* 
* @return array|null|object 
*/ 
function get_order_items($order_id) { 
    global $wpdb, $table_prefix; 

    $items  = $wpdb->get_results("SELECT * FROM `{$table_prefix}woocommerce_order_items` WHERE `order_id` = {$order_id}"); 
    $item_name = array(); 

    foreach ($items as $item) { 
     $item_name[] = $item->order_item_name; 
    } 

    return $item_name; 
} 
संबंधित मुद्दे