Il y a plusieurs façons d'accomplir cela. Ici, je l'utilise dans une fonction personnalisée avec une requête SQL et un $variation_id
(l'ID de variation de mettre en) comme paramètre dans le:
function get_all_orders_items_from_a_product_variation($variation_id){
global $wpdb;
// Getting all Order Items with that variation ID
$item_ids_arr = $wpdb->get_col($wpdb->prepare("
SELECT `order_item_id`
FROM {$wpdb->prefix}woocommerce_order_itemmeta
WHERE meta_key LIKE '_variation_id'
AND meta_value = %s
", $variation_id));
return $item_ids_arr; // return the array of orders items ids
}
du code dans le fichier function.php de votre enfant actif thème (ou thème) ou aussi dans n'importe quel fichier plugin.
USAGES(ici avec la variation ID 41 par exemple):
Cela permet d'afficher une liste d'éléments commandes ID pour cet ID de variation avec des données (par exemple).
$items_ids = get_all_orders_items_from_a_product_variation(41);
// Iterating through each order item
foreach($items_ids as $item_id){
// Getting some data (the color value here)
$item_color = wc_get_order_item_meta($item_id, 'pa_color', true);
// Displaying some data related to the current order item
echo 'Item ID: '. $item_id . ' with color "' . $item_color .'"<br>';
}
Ce code a été testé et fonctionne.
OBTENIR L'ID DE COMMANDE(MISE À JOUR)
Maintenant, si vous avez besoin pour obtenir tous les ID Commandes à la place, vous pouvez utiliser une autre requête dans cette fonction de cette façon:
function get_all_orders_that_have_a_product_variation($variation_id){
global $wpdb;
// Getting all Order IDs with that variation ID
$order_ids_arr = $wpdb->get_col($wpdb->prepare("
SELECT DISTINCT items.order_id
FROM {$wpdb->prefix}woocommerce_order_items AS items
LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS itemmeta ON items.order_item_id = itemmeta.order_item_id
WHERE meta_key LIKE '_variation_id'
AND meta_value = %s
", $variation_id));
return $orders_ids; // return the array of orders ids
}
Le code va dans le fichier function.php de votre actif thème enfant (ou thème) ou également dans un fichier plugin.
USAGES(ici toujours avec la variation ID 41 par exemple):
Cela permet d'afficher une liste d'ID de commandes pour cet ID de variation avec leur statut (par exemple).
$orders_ids = get_all_orders_that_have_a_product_variation(41);
// Iterating through each order item
foreach($orders_ids as $order_id){
// Getting an instance of the order object
$order = wc_get_order($order_id);
// Displaying some data related to the current order
echo 'Order #'. $order_id . ' has status "' . $order->get_status() .'"<br>';
}
Ce code a été testé et fonctionne.
Vous pouvez également combiner dans un tableau plus complexe, l'ID de commande avec elle est liée Articles ID dans un tableau multidimensionnel de cette façon:
function get_all_orders_and_item_ids_that_have_a_product_variation($variation_id){
global $wpdb;
// Getting all Order IDs and item ids with that variation ID
$results = $wpdb->get_results($wpdb->prepare("
SELECT items.order_id, items.order_item_id AS item_id
FROM {$wpdb->prefix}woocommerce_order_items AS items
LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS itemmeta ON items.order_item_id = itemmeta.order_item_id
WHERE meta_key LIKE '_variation_id'
AND meta_value = %s
", $variation_id), ARRAY_A);
return $results; // return a multi-dimensional array of orders Ids/items Ids
}
Merci beaucoup pour la réponse complète! J'ai fini par utiliser une combinaison de votre deuxième fonction et des fonctions WC pour étoffer les données, mais je vais vérifier si je peux optimiser mais obtenir tout de la requête. – Simon
Ne fonctionne pas pour moi, Peut-être un problème de version? Obtenir un tableau vide seulement. –
J'ai essayé d'ajouter des ID de commande, utilisé la deuxième fonction avec un préfixe personnalisé mais pas de chance. C'est juste un tableau vide. Même essayé de vérifier la fonction, puis trouvé 'item_ids_arr' montre tableau vide. –