2016-09-08 9 views
5

Ich versuche Artikel Meta-Wert von WooCommerce Befehl zu extrahieren, indem Sie:Wie bekomme ich Artikel-IDs, um Produkt-Metadaten zu erhalten?

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

Allerdings kann ich nicht einen Weg finden, als ersten Parameter zu erhalten order_item_id (mit 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; 
} 

und ich meine diese Ordnung item_id (1 und 2)

Order_item_id in database - Image

Wie kann ich das anziehen?

Danke.

Antwort

8

2018 Update:

  • Klärende die Antwort mit 2 möglichen Fälle
  • Added Kompatibilität für WooCommerce 3+

So kann es 2 Fälle sein:

1) Holen Produkt Metadaten (nicht festgelegt, um Artikel Meta-Daten):

Sie benötigen, um die Produkt-ID in der foreach-Schleife für einen WC_Order und bekommen einige Metadaten für dieses Produkt, das Sie verwenden wil get_post_meta() Funktion (aber nicht wc_get_order_item_meta()).

So, hier ist der Code:

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) Auftragsposition Metadaten (custom Feldwert) Get:

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; 
    } 
} 

Wenn die benutzerdefinierten Felddaten Ist ein Array, können Sie auf die Daten in einer foreach-Schleife zugreifen:

Der gesamte Code ist getestet und funktioniert.

Verweis auf Daten in Aufträgen im Zusammenhang:

+0

Hallo, danke für deine Antwort. Allerdings konnte $ item ['product_id'] nur die 'order_id' erhalten und es ist nicht hilfreich für mich. Sie können mein Bild oben sehen (http://i.stack.imgur.com/8OJ7U.jpg). Alles, was ich bekommen kann, ist die Produkt-ID in der Spalte meta_value (Nummer 90), aber was ich brauche, ist die Nummer in order_item_id (1 oder 2), so dass ich den Wert von _tmcartepo_data meta_key erhalten kann. Irgendeine Idee? – camelot

+0

Ich bekomme derzeit "Call to a member function get_items() on boolean" Fehler für den Aufruf von get_items() (WP 4.6.1 und WC 2.6.4). Versuchen Sie herauszufinden, warum, aber es scheint, Sie weisen mich in die richtige Richtung. – camelot

0

Verwenden Sie diese <pre><?php print_r($items); ?></pre>, um den gesamten Inhalt des $ items array/object zu überprüfen.

+0

Hallo, ich habe ein Array mit allen Daten in woocommerce_order_itemmeta Tabelle, aber nicht sicher, wie ich den Wert, den ich brauche. Ich weiß nicht, ob es überhaupt einen Zugang zu einem Meta_key-Wert in diesem Array gibt? – camelot

1

spät, um die Partei, sondern wurde mit dem gleichen Punkt der Arbeit mit TM Extra Product Options Plugin, ich denke, das ist, was Ihre Frage beantwortet:

$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; 
} 

Getestet und funktioniert in meinem Fall.

5

Wenn Sie die Foreach auf $order->get_items() tun, ist ihr Schlüssel tatsächlich die ID der Bestellnummer. Also:

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'); 
... 

Diese Lösung hat sich gelohnt für mich ändern "_tmcartepo_data" für Ihre meta_key.

0

Eine einfache Möglichkeit, Bestellpositionen aus der Datenbank zu bekommen;

/** 
* @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; 
} 
/** 
* @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; 
} 
Verwandte Themen