Comment obtenir les order_item_méta d’une commande WooCommerce

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)

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)

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)

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

 

mike

mike

Chef de projet web, Mike assure la réussite de projets digitaux depuis 2011. Son but est d'aider les webmasters et les freelances à tirer le meilleur des outils comme WordPress, WooCommerce et Elementor. Sur ce blog il partage son expérience, ses astuces et les pépites dénichées sur le web. Mike aime les afters, faire des shoots de baskets et les films d'horreur,

Laisser un commentaire

Votre adresse e-mail 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.

Thématiques

Vous recherchez des astuces dans un secteur donné ? Vous pouvez accéder directement à la catégorie qui vous intéresse !