Obtenir l'identifiant du produit à partir de l'identifiant de la commande dans Woocommerce
2 réponses
- votes
-
- 2013-04-25
WooCommerce 3.0+
vouspouvez obtenir les articles d'une commandepar
$order = wc_get_order( $order_id ); $items = $order->get_items();
alors si vousparcourez les élémentsen boucle,vouspouvez obtenirtoutes les donnéespertinentes:
foreach ( $items as $item ) { $product_name = $item->get_name(); $product_id = $item->get_product_id(); $product_variation_id = $item->get_variation_id(); }
unbon conseilest de vérifier comment lespages de commande d'administration obtiennent les données,vous ytrouverez denombreuses réponses!
Pré-WooCommerce 3.0
$order = new WC_Order( $order_id ); $items = $order->get_items(); foreach ( $items as $item ) { $product_name = $item['name']; $product_id = $item['product_id']; $product_variation_id = $item['variation_id']; }
WooCommerce 3.0+
you can get the order items of an order by
$order = wc_get_order( $order_id ); $items = $order->get_items();
then if you loop through the items, you can get all the relevant data:
foreach ( $items as $item ) { $product_name = $item->get_name(); $product_id = $item->get_product_id(); $product_variation_id = $item->get_variation_id(); }
a good tip is to check how the admin order pages get the data, you'll find many answers there!
Pre-WooCommerce 3.0
$order = new WC_Order( $order_id ); $items = $order->get_items(); foreach ( $items as $item ) { $product_name = $item['name']; $product_id = $item['product_id']; $product_variation_id = $item['variation_id']; }
-
Sauf sije manque quelque chose,celane semblepasfonctionner dans la dernière version de WooCommerce ...Unless I'm missing something, this doesn't appear to work in the latest version of WooCommerce...
- 0
- 2015-11-09
- rnevius
-
Fonctionnetoujours dans WooCommerce 2.4.8pourmoi,mais vous devez avoir la variable $ order_id définie (parfois c'est dans $ order->id,selon votre contexte).Still works in WooCommerce 2.4.8 for me, but you need to have the $order_id variable defined (sometimes it's in $order->id, depending on your context).
- 0
- 2015-11-10
- Ewout
-
@meviusj'ai ajouté unemodificationpour 3+ avec unefonction d'expéditionpour vérifierplusieursproduits@mevius i added an edit for 3+ with a dispatch function for checking multiple products
- 0
- 2017-10-20
- Garet Claborn
-
voir l'historique desmodificationspour le répartiteur,cen'estpasbon sans cela car cela dévorera votre serveurinutilementsee edit history for dispatcher, this is not good without it as it will eat up your server pointlessly
- 0
- 2017-11-22
- Garet Claborn
-
@GaretClaborn qui dépendentièrement de ce que vousfaites avec ces données.'tel quel',cetexemple d'extrait de coden'esten aucun cas ungaspillage demémoire.@GaretClaborn that depends entirely on what you're doing with this data. 'as is', this example snippet is not wasteful of memory in any way.
- 0
- 2017-11-27
- Ewout
-
Si vous vérifiezplusieursproduits,vous répétez unpeu de logiqueplutôt que depouvoir capitaliser sur lapremièreexécution de laboucle.If you are checking multiple products then you're repeating quite a bit of logic vs being able to capitalize on the first run of the loop
- 0
- 2017-12-19
- Garet Claborn
-
- 2013-04-25
J'aitravaillé dessuset j'ai réalisé quelque chose.Queje voudraispartager avec d'autres développeurs.Cen'estpas lameilleurefaçon de lefaire,maispour savoir,je publiema réponse.
global $wpdb; $result = $wpdb->get_results('select t1.order_item_id, t2.* FROM wp_woocommerce_order_items as t1 JOIN wp_woocommerce_order_itemmeta as t2 ON t1.order_item_id = t2.order_item_id where t1.order_id='.$order->ID); echo '<pre>'; print_r($result); echo '</pre>';
l'espoir aidera quelqu'un.
Deplus:
Mieux vaut utiliser lepréfixe detable wordpresspour éviter lesproblèmes dansplusieurs sites Web ou lors de lamigration,etc.
global $wpdb; $table_name = $wpdb->prefix . 'table_name';
I worked on it and achieved something. That I would like to share to other developers. This is not preferred way to do it, but for knowledge I am posting my answer.
global $wpdb; $result = $wpdb->get_results('select t1.order_item_id, t2.* FROM wp_woocommerce_order_items as t1 JOIN wp_woocommerce_order_itemmeta as t2 ON t1.order_item_id = t2.order_item_id where t1.order_id='.$order->ID); echo '<pre>'; print_r($result); echo '</pre>';
hope will help someone.
Additionally:
Better to use wordpress table prefix to avoid problems in multiple website or in migration etc.
global $wpdb; $table_name = $wpdb->prefix . 'table_name';
-
@ErenorPaz Merci,j'ai ajouté du contenuen réponse,en réponse à votre commentaire :)@ErenorPaz Thanks, I added content in answer, in reply to your comment :)
- 1
- 2016-10-25
- arslaan ejaz
-
Mercipour la réponse rapide,même sur un vieuxfil!Je supprimeraimes commentairesprécédents,carils sontmaintenant obsolètes :)Thank you for the fast response, even on an old thread! I'll delete my previous comments, since it's outdated now :)
- 0
- 2016-10-25
- Erenor Paz
Je rencontre desproblèmes avec les détails desproduits Woocommerceet la relationentre les détails de la commande.Jene parvienspas àtrouver l'IDproduit d'un ID de commande associé sur lapage Afficher les commandes duthème Woocommerce.Je souhaite simplement obtenir le contenu duproduitet le lienpermanent,etc. sur lapage Afficher les commandes .
J'aiessayé de chercher dans
wp_postmeta
maisje n'aipaseu de chance.