WooCommerce get_sku(); 제품 바리에이션 순서
제품 SKU를 구해야 하는 Woocommerce용 커스텀 기능을 구축하고 있으며, '바리에이션' 제품이 변형별 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 커밋을 하지 않았기 때문에, 올바른 코드를 되돌릴 수 없다는 것입니다.제가 찾은 예들은 대부분 많은 코드들이 존재하지만, 훨씬 더 단순하고 더 나은 성능의 방법으로 이 작업을 수행할 수 있다고 확신합니다.
터널의 시야에 대해 얘기해보죠
$product_variation_id = $item['variation_id'];
$product = new WC_Product($item['product_id']);
솔루션이 이미 있는 'variation_id'에 대해 'product_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();
}
WooCommerce 3.x에서는 이 행이 치명적인 오류를 발생시킵니다.
$product = new WC_Product($item['variation_id']);
'유효하지 않은 제품' 메시지와 함께 예외 '예외'가 발견되었습니다.
다음과 같이 할 수 있습니다.
$sku = get_post_meta( $item['variation_id'], '_sku', true );
이 링크는 SKU를 주문 아이템 메타에 추가하기 때문에 함수를 추가로 호출할 필요가 없기 때문에 매우 도움이 되었습니다.
https://majemedia.com/woocommerce-save-item-sku-to-order-item-meta-for-historical-reference/
Woocommerce 3.8.1에서 테스트 완료
// Define HERE the accepted statuses of that orders
$order_statuses = array('wc-completed');
// Define HERE the customer ID
$customer_user_id = get_current_user_id(); // current user ID here for example
// Getting current customer orders
$customer_orders = wc_get_orders( array(
'meta_key' => '_customer_user',
'meta_value' => $customer_user_id,
'post_status' => $order_statuses,
'numberposts' => -1
) );
// Loop through each customer WC_Order objects
foreach($customer_orders as $order ){
$order = new WC_Order($order->get_id());
$items = $order->get_items();
// Loop through each item of the order
foreach ( $items as $item ) {
$product_variation_id = $item['variation_id'];
if ($product_variation_id) { // IF Order Item is Product Variantion then get Variation Data instead
$product = wc_get_product($item['variation_id']);
} else {
$product = wc_get_product($item['product_id']);
}
if ($product) { // Product might be deleted and not exist anymore
$sku = $product->get_sku();
echo "<p>SKU: " . $sku . "</p>";
}
}
}
언급URL : https://stackoverflow.com/questions/28662963/woocommerce-get-sku-on-products-variations-in-order
'programing' 카테고리의 다른 글
WooCommerce: 코드로 제품 생성 (0) | 2023.03.01 |
---|---|
Spring Boot 앱의 웹 소켓 - 403 금지 (0) | 2023.03.01 |
Spring ResponseStatusException이 이유를 반환하지 않음 (0) | 2023.03.01 |
react/typescript: 매개 변수 'props'에 암시적으로 '임의' 형식 오류가 있습니다. (0) | 2023.03.01 |
WordPress는 이미지 메타 데이터를 어디에 저장합니까? (0) | 2023.03.01 |