WooCommerce get_sku(); по вариантам продукции в порядке
Я создаю пользовательскую функцию для Woocommerce, где мне нужно получить SKU продукта, и если "вариационный" продукт получит специфический для SKU вариант.
В настоящее время у меня есть следующее:
// Query order data
$order = new WC_Order($order_id);
$items = $order->get_items();
// Output the loop
foreach ($order->get_items() as $item) {
// Getting some information
$product_name = $item['name'];
$product_id = $item['product_id'];
$product_qty = $item['qty'];
$product_variation_id = $item['variation_id'];
$product = new WC_Product($item['product_id']);
// SKU
$SKU = $product->get_sku();
Он работает хорошо, кроме случаев, когда дело доходит до вариаций, я потратил много времени, пытаясь понять это и найти хороший ответ без каких-либо успехов.
Я понял, что должен использовать что-то вроде этого:
$available_variations = $product->get_available_variations();
Сумасшедшая вещь заключается в том, что у меня была эта работа, но я не сделал фиксацию Git, поэтому я не могу вернуть правильный код. Все примеры, которые я нашел довольно много, содержат много кода, но я уверен, что это можно сделать, используя гораздо более простой и эффективный способ.
Ответы
Ответ 1
Разговор о туннельном видении.
$product_variation_id = $item['variation_id'];
$product = new WC_Product($item['product_id']);
Решение переключило 'product_id' на мой уже установленный вариант 'variant_id'
$product = new WC_Product($item['variation_id']);
Voila, проблема решена!
Рабочий пример
Чтобы получить ожидаемый результат на $sku
, я сделал это решение
// Get order data
$order = new WC_Order($order_id);
$items = $order->get_items();
// Loop through ordered items
foreach ($items as $item) {
$product_name = $item['name'];
$product_id = $item['product_id'];
$product_qty = $item['qty'];
$product_variation_id = $item['variation_id'];
// Check if product has variation.
if ($product_variation_id) {
$product = new WC_Product($item['variation_id']);
} else {
$product = new WC_Product($item['product_id']);
}
// Get SKU
$sku = $product->get_sku();
}
Ответ 2
В WooCommerce 3.x эта строка вызывает фатальную ошибку:
$product = new WC_Product($item['variation_id']);
Отключить исключение "Исключение" с сообщением "Недействительный продукт".
Вы можете сделать это:
$sku = get_post_meta( $item['variation_id'], '_sku', true );
Ответ 3
Я нашел эту следующую ссылку массово полезной, добавив SKU к элементу позиции заказа, поэтому нет необходимости в дополнительном вызове функций.
https://majemedia.com/woocommerce-save-item-sku-to-order-item-meta-for-historical-reference/