web-dev-qa-db-fra.com

Woocommerce - Obtenir le prix et la quantité des articles commandés.

Avec Woocommerce 2.6.8, je ne peux pas obtenir les informations relatives aux commandes comme décrit dans les docs et ici sous SO .

Tout ce que je veux, c'est obtenir le prix et la quantité des articles, qui doivent être aussi simples que:

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

Regarder de plus près ce qui est retourné

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:{}}
                    )

            )

    )

)

Tout ceci utilise des méthodes documentées de Woocommerce. Pourquoi les informations dont j'ai besoin sont-elles stockées dans ce item_meta_array

Est-ce que quelqu'un sait comment je peux obtenir cette information? 

De préférence, utilisez des méthodes documentées plutôt qu'un hack brutal de boucle dans le item_meta_array jusqu'à ce que je trouve la clé que je cherche.

Je sens qu'il me manque quelque chose d'évident ici.

14
robobobobo

Mise à jour (Pour WooCommerce 3+)} 

Maintenant pour le code, vous pouvez utiliser les méthodes WC_Order_Item_Product (et WC_Product ), comme:

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

Ce code est testé et fonctionne.

La méthode get_item_meta() est obsolète et a été remplacée par wc_get_order_item_meta et ce n'est plus une méthode mais une fonction avec certains paramètres:

/** 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 );

Anciennes versions de woocommerce (de 2.4 à 2.6.x)

Vous pouvez utiliser la méthode get_item_meta() WC_Abstract_order pour obtenir les métadonnées de la commande (la quantité et le total du prix de l'article). 

Donc, votre code sera:

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

Ce code est testé et entièrement fonctionnel.

Référence: Classe WC_Abstract_Order Méthodes

35
LoicTheAztec

Le prix de l'article peut être obtenu à partir de order objet à l'aide du code ci-dessous.

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

Reportez-vous à cette documentation pour la ligne de commande woocommerce dans la classe de commande . Ici

Vous pouvez appeler total pour obtenir le coût total de la commande .. Si vous souhaitez récupérer le coût d'un article en prenant le ID_produit

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

Ou tu peux faire ça.

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