WooCommerce get_sku(); 关于产品的顺序变化

Mat*_*erg 14 php wordpress woocommerce

我正在为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();
Run Code Online (Sandbox Code Playgroud)

它的效果很好,除了变化之外,我花了很多时间试图解决这个问题并找到一个没有任何成功的好答案.

我明白我应该使用这样的东西:

$available_variations = $product->get_available_variations();
Run Code Online (Sandbox Code Playgroud)

疯狂的是我确实有这个工作,但我没有做过Git提交,因此我无法恢复正确的代码.我发现的所有示例都存在很多代码,但我确信这可以使用更简单,性能更好的方法来完成.

Mat*_*erg 24

谈谈隧道视觉..

 $product_variation_id = $item['variation_id'];
 $product = new WC_Product($item['product_id']);
Run Code Online (Sandbox Code Playgroud)

解决方案是切换'product_id'为我已经存在的'variation_id'

$product = new WC_Product($item['variation_id']);
Run Code Online (Sandbox Code Playgroud)

瞧,问题解决了!

工作示例 为了获得$skui 的预期输出,请继续使用此解决方案

// 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();
}
Run Code Online (Sandbox Code Playgroud)

  • 你可以用`$ product = $ order-> get_product_from_item($ item)替换**if**部分;`[参见/abstract-wc-order.php中的get_product_from_item函数](https://plugins.trac. wordpress.org/browser/woocommerce/trunk/includes/abstracts/abstract-wc-order.php#L1904) (3认同)

Mik*_*ike 12

WooCommerce 3.x上,这一行引发致命错误:

$product = new WC_Product($item['variation_id']);
Run Code Online (Sandbox Code Playgroud)

带有"无效产品"消息的未捕获异常"异常".

你可以这样做:

$sku = get_post_meta( $item['variation_id'], '_sku', true );
Run Code Online (Sandbox Code Playgroud)