webentwicklung-frage-antwort-db.com.de

WooCommerce get_sku (); auf Produktvariationen in der Reihenfolge

Ich baue eine benutzerdefinierte Funktion für Woocommerce auf, bei der ich Produkt-SKUs und wenn "Variation" -Produkt variationsspezifische SKUs erhält. 

Was ich momentan habe, ist folgendes:

// 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();

Es funktioniert gut, außer wenn es um Variationen geht. Ich habe viel Zeit darauf verwendet, dies herauszufinden und eine gute Antwort zu finden, ohne Erfolg. 

Ich verstehe, dass ich so etwas verwenden sollte:

$available_variations = $product->get_available_variations();

Das Verrückte ist, dass ich zwar funktioniert habe, aber kein Git-Commit gemacht habe. Daher kann ich den korrekten Code nicht wiederherstellen. Alle Beispiele, die ich gefunden habe, bestehen aus einer Menge Code, aber ich bin sicher, dass dies mit einer viel einfacheren und leistungsfähigeren Methode durchgeführt werden kann.

13
Mathias Asberg

Sprechen Sie über den Tunnelblick .. 

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

Lösung wechselte 'product_id' für meine bereits vorhandene 'variant_id'

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

Voila, Problem gelöst!

Funktionsbeispiel Um die erwartete Ausgabe für $sku zu erhalten, habe ich mich für diese Lösung entschieden 

// 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();
}
24
Mathias Asberg

Bei WooCommerce 3.x Diese Zeile wirft einen schwerwiegenden Fehler ab:

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

Nicht erfasste Ausnahme 'Ausnahme' mit der Meldung 'Ungültiges Produkt'.

Du kannst das:

$sku = get_post_meta( $item['variation_id'], '_sku', true );
10
Mike

Ich fand diesen folgenden Link enorm hilfreich, da die SKU der Bestellartikel-Meta hinzugefügt wird, sodass kein zusätzlicher Aufruf von Funktionen erforderlich ist.

https://majemedia.com/woocommerce-save-item-sku-to-order-item-meta-for-historical-reference/

1
MikeeeGeee