Produkt-ID von Bestell-ID in Woocommerce abrufen [geschlossen]

38

Ich habe Probleme mit Woocommerce-Produktdetails und der Beziehung zu Bestelldetails. Ich kann die Produkt-ID einer zugehörigen Bestell- ID auf der Seite Bestellungen anzeigen des Woocommerce-Themas nicht finden. Ich möchte lediglich den Produktinhalt und den Permalink usw. auf der Seite " Bestellungen anzeigen" erhalten.

Ich habe versucht zu suchen wp_postmeta, hatte aber kein Glück.

arslaan ejaz
quelle

Antworten:

68

WooCommerce 3.0+

Sie können die Bestellpositionen einer Bestellung per erhalten

$order = wc_get_order( $order_id );
$items = $order->get_items();

Wenn Sie dann die Elemente durchlaufen, können Sie alle relevanten Daten abrufen:

foreach ( $items as $item ) {
    $product_name = $item->get_name();
    $product_id = $item->get_product_id();
    $product_variation_id = $item->get_variation_id();
}

Ein guter Tipp ist, zu überprüfen, wie die Admin-Bestellseiten die Daten erhalten. Dort finden Sie viele Antworten!

Pre-WooCommerce 3.0

$order = new WC_Order( $order_id );
$items = $order->get_items();
foreach ( $items as $item ) {
    $product_name = $item['name'];
    $product_id = $item['product_id'];
    $product_variation_id = $item['variation_id'];
}
Ewout
quelle
Sofern mir nichts fehlt, scheint dies in der neuesten Version von WooCommerce nicht zu funktionieren ...
rnevius
Funktioniert immer noch in WooCommerce 2.4.8, aber Sie müssen die Variable $ order_id definiert haben (manchmal ist es in $ order-> id, abhängig von Ihrem Kontext).
Ewout
@mevius Ich habe eine Bearbeitung für 3+ mit einer Versandfunktion für die Überprüfung mehrerer Produkte
hinzugefügt
Siehe Bearbeitungsverlauf für Dispatcher, dies ist nicht gut ohne es, da es Ihren Server sinnlos
auffressen wird
@GaretClaborn Das hängt ganz davon ab, was Sie mit diesen Daten machen. 'as is', dieses Beispiel-Snippet verschwendet in keiner Weise Speicher.
Ewout
6

Ich habe daran gearbeitet und etwas erreicht. Das möchte ich anderen Entwicklern mitteilen. Dies ist keine bevorzugte Methode, aber aus Wissensgründen veröffentliche ich meine Antwort.

global $wpdb;
            $result = $wpdb->get_results('select t1.order_item_id, t2.* FROM 
            wp_woocommerce_order_items as t1 JOIN wp_woocommerce_order_itemmeta as t2 ON t1.order_item_id = t2.order_item_id
            where t1.order_id='.$order->ID);
            echo '<pre>';
            print_r($result);
            echo '</pre>'; 

Hoffnung hilft jemandem.

Zusätzlich:

Verwenden Sie besser das Präfix für WordPress-Tabellen, um Probleme bei mehreren Websites oder bei der Migration usw. zu vermeiden.

global $wpdb;
$table_name = $wpdb->prefix . 'table_name'; 
arslaan ejaz
quelle
1
@ErenorPaz Danke, ich habe als Antwort auf Ihren Kommentar Inhalt hinzugefügt :)
arslaan ejaz
Vielen Dank für die schnelle Antwort, auch auf einen alten Thread! Ich werde meine vorherigen Kommentare löschen, da es jetzt veraltet ist :)
Erenor Paz