Capture d’écran 2018 11 02 à 13.19.10

Comment obtenir les order_item_méta d’une commande WooCommerce

Temps de lecture estimé : 2 minutes

Comment WooCommerce stocke les informations d’une commande order ?

WooCommerce permet de stocker les éléments de chaque commande en tant qu’order_item, c’est à dire que chaque ligne constituant la facture d’une commande sera stockée dans la table woocommerce_order_items (voir ici les infos concernant les tables WooCommerce)

Un exemple concret avec une commande WooCommerce

Exemple concret pour une commande, la commande 10720. Cette commande est assez complète car compte 3 produits, des frais, des informations de livraison, de tva, ainsi qu’un réduction utilisée via un coupon de réduction (-10% sur la commande)

commande

On sait donc que cette commande est composée de tous les order_items correspondant à l’id de cette commande (order) à savoir 10720.

Chaque ligne de cette commande a des informations spécifiques, qui sont stockées dans la table woocommerce_order_itemmeta en tant que order_item-meta, et pour retrouver ces infos on utilise le order_item_id 

Concrètement, voici les informations concernant la 1ère ligne de cette commande (285)

Capture d’écran 2018 10 31 à 17.08.19

Une subtilité intéressante est « _line_subtotal » qui représente le total de la ligne de facturation (qté * prix) AVANT remise alors que « _line_total » représente la ligne APRÈS remise.

Les autres lignes produit ont le même type d’infos, voici celle concernant la livraison (289)

Capture d’écran 2018 10 31 à 17.57.19

En résumé, les méta de order_item contiennent des infos très intéressantes dont vous pouvez avoir besoin, et nous allons voir comment les obtenir en php

Comment obtenir les données order_item_meta de WooCommerce

Cela est possible via la fonction wc_get_order_item_meta qui prend plusieurs paramètres :

  • l’id de l’order_item
  • la clé méta voulue
  • si la valeur est unique (default: true))
global $post;
$order = wc_get_order( $post->ID );
$items = $order->get_items(); 

foreach ($items as $item_id => $item ) {

    // On récupère ici la order meta dont on a besoin
    $custom_field = wc_get_order_item_meta( $item_id, '_tmcartepo_data', true ); 

    // Pour tester vous pouvez décommenter la ligne ci dessous
    // print_r($custom_field);

    // si on récupère un tableau ...
    if( is_array( $custom_field ) ){
        echo implode( '<br>', $custom_field ); // one value displayed by line 
    } 
    // ... ou si c'est juste une chaîne
    else {
        echo $custom_field;
    }
}

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.