wake-up-neo.net

Woocommerce - Preis und Menge der Bestellposition abrufen.

Mit Woocommerce 2.6.8 kann ich die Informationen zu den Bestellpositionsdaten nicht erhalten, wie in den Abschnitten docs und hier auf SO beschrieben.

Alles, was ich möchte, ist den Preis und die Menge der Werbebuchung zu erhalten, die so einfach sein sollte wie:

$order = new WC_Order( $order_id );
$order_items = $order->get_items();
 foreach ($order_items as $items_key => $items_value) {  
           echo $items_value['name']; //this works
           echo $items_value['qty']; //this doesn't work
           echo $items_value[item_meta][_qty][0]; //also doesn't work
           echo $items_value['line_total']; //this doesn't work
   }

Ein genauerer Blick auf das, was zurückgegeben wird, wird zurückgegeben

Array
(
[1] => Array
    (
        [name] => Sample Product 1
        [type] => line_item
        [item_meta] => 
        [item_meta_array] => Array
            (
                [1] => stdClass Object
                    (
                        [key] => _qty
                        [value] => 1
                    )

                [2] => stdClass Object
                    (
                        [key] => _tax_class
                        [value] => 
                    )

                [3] => stdClass Object
                    (
                        [key] => _product_id
                        [value] => 8
                    )

                [4] => stdClass Object
                    (
                        [key] => _variation_id
                        [value] => 0
                    )

                [5] => stdClass Object
                    (
                        [key] => _line_subtotal
                        [value] => 50
                    )

                [6] => stdClass Object
                    (
                        [key] => _line_total
                        [value] => 50
                    )

                [7] => stdClass Object
                    (
                        [key] => _line_subtotal_tax
                        [value] => 0
                    )

                [8] => stdClass Object
                    (
                        [key] => _line_tax
                        [value] => 0
                    )

                [9] => stdClass Object
                    (
                        [key] => _line_tax_data
                        [value] => a:2:{s:5:"total";a:0:{}s:8:"subtotal";a:0:{}}
                    )

            )

    )

)

Dies ist alles unter Verwendung dokumentierter Woocommerce-Methoden. Warum werden die benötigten Informationen in diesem item_meta_array gespeichert? 

Weiß jemand, wie ich diese Informationen erhalten kann? 

Vorzugsweise mit dokumentierten Methoden im Gegensatz zu einem groben Durcheinander durch den item_meta_array, bis ich den Schlüssel finde, nach dem ich suche.

Ich habe das Gefühl, dass ich hier etwas offensichtlich übersehen muss.

14
robobobobo

Update (Für WooCommerce 3+) 

Als Code können Sie stattdessen die Methoden WC_Order_Item_Product (und WC_Product ) verwenden, z.

## For WooCommerce 3+ ##

// Getting an instance of the WC_Order object from a defined ORDER ID
$order = wc_get_order( $order_id ); 

// Iterating through each "line" items in the order
foreach ($order->get_items() as $item_id => $item_data) {

    // Get an instance of corresponding the WC_Product object
    $product = $item_data->get_product();
    $product_name = $product->get_name(); // Get the product name

    $item_quantity = $item_data->get_quantity(); // Get the item quantity

    $item_total = $item_data->get_total(); // Get the item line total

    // Displaying this data (to check)
    echo 'Product name: '.$product_name.' | Quantity: '.$item_quantity.' | Item total: '. number_format( $item_total, 2 );
}

Dieser Code wurde getestet und funktioniert.

Die Methode get_item_meta() ist veraltet und wurde durch wc_get_order_item_meta ersetzt, und es ist keine Methode mehr, sondern eine Funktion mit einigen Parametern:

/** Parameters summary
 * @param mixed $item_id
 * @param mixed $key
 * @param bool $single (default: true)
 * @return mixed
 */

wc_get_order_item_meta( $item_id, $key, $single = true );

Vorgängerversionen von woocommerce (von 2.4 bis 2.6.x)

Sie können die Methode get_item_meta() WC_Abstract_order verwenden, um die Auftragsmetadaten (die Artikelmenge und den Artikelpreis insgesamt) abzurufen. 

Ihr Code lautet also:

// Getting the order object "$order"
$order = wc_get_order( $order_id );
// Getting the items in the order
$order_items = $order->get_items();
// Iterating through each item in the order
foreach ($order_items as $item_id => $item_data) {
    // Get the product name
    $product_name = $item_data['name'];
    // Get the item quantity
    $item_quantity = $order->get_item_meta($item_id, '_qty', true);
    // Get the item line total
    $item_total = $order->get_item_meta($item_id, '_line_total', true);

    // Displaying this data (to check)
    echo 'Product name: '.$product_name.' | Quantity: '.$item_quantity.' | Item total: '. $item_total;
}

Dieser Code ist getestet und voll funktionsfähig.

Referenz: Methoden der Klasse WC_Abstract_Order

35
LoicTheAztec

Der Artikelpreis kann von dem order-Objekt mit dem folgenden Code abgerufen werden

$order->get_item_total( $item );
3
Nishad Up

In dieser Dokumentation finden Sie die Woocommerce-Werbebuchung in der Bestellklasse . Hier

Sie können die Gesamtsumme der Bestellkosten abrufen, um die Gesamtkosten abzurufen. Wenn Sie die Einzelpostenkosten abrufen möchten, verwenden Sie die product_id

$_product = wc_get_product( $product_id );
$Price = $_product->get_price();

Oder Sie können das tun.

$price = get_post_meta( get_the_ID(), '_regular_price', true);
$price = get_post_meta( get_the_ID(), '_sale_price', true);
1
Hemel