Uzyskaj identyfikator produktu z identyfikatora zamówienia w Woocommerce [zamknięte]

38

Mam problem ze szczegółami produktu Woocommerce i relacją szczegółów zamówienia. Nie mogę znaleźć identyfikatora produktu powiązanego identyfikatora zamówienia na stronie Wyświetl zamówienia motywu Woocommerce. Chcę po prostu uzyskać treść produktu i łącze bezpośrednie itp. Na stronie Wyświetl zamówienia .

Próbowałem szukać, wp_postmetaale nie miałem szczęścia.

arslaan ejaz
źródło

Odpowiedzi:

68

WooCommerce 3.0+

możesz uzyskać elementy zamówienia przez

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

następnie jeśli przejdziesz przez elementy, możesz uzyskać wszystkie odpowiednie dane:

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

dobrą wskazówką jest sprawdzenie, w jaki sposób strony zamówień administratora uzyskują dane, znajdziesz tam wiele odpowiedzi!

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
źródło
Chyba, że ​​coś mi brakuje, wydaje się, że nie działa to w najnowszej wersji WooCommerce ...
rnevius
Nadal działa dla mnie w WooCommerce 2.4.8, ale musisz mieć zdefiniowaną zmienną $ order_id (czasem jest to $ order-> id, w zależności od kontekstu).
Ewout,
@mevius dodałem edycję dla 3+ z funkcją wysyłki do sprawdzania wielu produktów
Garet Claborn,
zobacz historię edycji dla dyspozytora, bez tego nie jest to dobre, ponieważ bezsensownie zje twój serwer
Garet Claborn,
@GaretClaborn zależy to całkowicie od tego, co robisz z tymi danymi. „jak jest”, ten przykładowy fragment nie marnuje pamięci w żaden sposób.
Ewout
6

Pracowałem nad tym i coś osiągnąłem. Chciałbym się tym podzielić z innymi programistami. Nie jest to preferowany sposób, aby to zrobić, ale dla wiedzy zamieszczam swoją odpowiedź.

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>'; 

nadzieja komuś pomoże.

Dodatkowo:

Lepiej używać prefiksu tabeli wordpress, aby uniknąć problemów na wielu stronach internetowych lub w migracji itp.

global $wpdb;
$table_name = $wpdb->prefix . 'table_name'; 
arslaan ejaz
źródło
1
@ErenorPaz Dzięki, dodałem treść w odpowiedzi, w odpowiedzi na twój komentarz :)
arslaan ejaz 25.10.16
Dziękujemy za szybką odpowiedź, nawet w starym wątku!
Usunę