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.
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 parwc_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
Le prix de l'article peut être obtenu à partir de order
objet à l'aide du code ci-dessous.
$order->get_item_total( $item );
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);