WooCommerce get_sku();产品变化顺序

2022-08-31 00:10:57

我正在为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']);

解决方案是为我已经到位的“variation_id”切换“product_id”

$product = new WC_Product($item['variation_id']);

瞧,问题解决了!

工作实例为了获得预期的输出,我确实选择了这个解决方案$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 );

推荐