Obtenir l'identifiant du produit de l'identifiant de la commande dans Woocommerce [fermé]

38

J'ai des problèmes avec les détails des produits Woocommerce et les détails des commandes. Je ne parviens pas à trouver l'ID de produit d'un ID de commande associé sur la page Afficher les commandes du thème Woocommerce. Je veux simplement obtenir le contenu du produit et le permalien, etc. sur la page Afficher les commandes .

J'ai essayé de chercher wp_postmetamais je n'ai pas eu de chance.

Arslaan Ejaz
la source

Réponses:

68

WooCommerce 3.0+

vous pouvez obtenir les articles d'une commande par

$order = wc_get_order( $order_id );
$items = $order->get_items();

ensuite, si vous parcourez les éléments, vous pouvez obtenir toutes les données pertinentes:

foreach ( $items as $item ) {
    $product_name = $item->get_name();
    $product_id = $item->get_product_id();
    $product_variation_id = $item->get_variation_id();
}

Un bon conseil est de vérifier comment les pages de commande de l'administrateur obtiennent les données, vous y trouverez de nombreuses 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'];
}
Ewout
la source
Sauf si quelque chose me manque, cela ne semble pas fonctionner dans la dernière version de WooCommerce ...
rnevius
Cela fonctionne toujours dans WooCommerce 2.4.8 pour moi, mais vous devez définir la variable $ order_id (parfois dans $ order-> id, en fonction de votre contexte).
Ewout
@mevius j'ai ajouté une modification pour 3+ avec une fonction d'expédition pour vérifier plusieurs produits
Garet Claborn
voir l'historique des modifications pour dispatcher, ce n'est pas bon sans ça car il va manger votre serveur inutilement
Garet Claborn
@GaretClaborn cela dépend entièrement de ce que vous faites avec ces données. "tel quel", cet exemple d'extrait ne gaspille en rien la mémoire.
Ewout
6

J'ai travaillé dessus et réalisé quelque chose. Que j'aimerais partager avec d'autres développeurs. Ce n’est pas une façon privilégiée de le faire, mais pour le savoir, je publie ma 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.

Aditionellement:

Mieux vaut utiliser le préfixe de table wordpress pour éviter les problèmes de sites Web multiples, de migration, etc.

global $wpdb;
$table_name = $wpdb->prefix . 'table_name'; 
Arslaan Ejaz
la source
1
@ErenorPaz Merci, j'ai ajouté du contenu dans la réponse, en réponse à votre commentaire :)
arslaan ejaz
Merci pour la réponse rapide, même sur un vieux fil! Je vais supprimer mes commentaires précédents, car il est obsolète maintenant :)
Erenor Paz