Obține ID-ul produsului din ID-ul comenzii în Woocommerce
Am dificultăți cu relația dintre detaliile produsului și detaliile comenzii în Woocommerce. Nu reușesc să găsesc ID-ul produsului pentru un ID de comandă corespunzător în pagina Vizualizare Comenzi a temei Woocommerce. Doresc simplu să obțin conținutul produsului și permalink-ul etc. în pagina Vizualizare Comenzi.
Am încercat să caut în wp_postmeta
dar nu am avut succes.

WooCommerce 3.0+
Puteți obține articolele comenzii pentru o comandă folosind
$order = wc_get_order( $order_id );
$items = $order->get_items();
apoi, dacă parcurgeți articolele, puteți obține toate datele relevante:
foreach ( $items as $item ) {
$product_name = $item->get_name();
$product_id = $item->get_product_id();
$product_variation_id = $item->get_variation_id();
}
un sfat bun este să verificați cum preiau paginile de administrare a comenzilor datele, veți găsi multe răspunsuri acolo!
Înainte de 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'];
}

Dacă nu greșesc, această soluție nu pare să funcționeze în cea mai recentă versiune de WooCommerce...

Încă funcționează în WooCommerce 2.4.8 pentru mine, dar trebuie să ai variabila $order_id definită (uneori se găsește în $order->id, în funcție de contextul tău).

@mevius am adăugat o editare pentru versiunea 3+ cu o funcție de distribuție pentru verificarea mai multor produse

vezi istoricul modificărilor pentru dispatcher, acest lucru nu este bun fără el, deoarece va consuma resursele serverului fără rost

@GaretClaborn asta depinde în totalitate de ce faci cu aceste date. 'așa cum este', acest fragment de exemplu nu irosesc memoria în niciun fel.

Dacă verifici mai multe produse, atunci repeți o bună parte din logică față de posibilitatea de a profita de prima rulare a buclei

Am lucrat la asta și am realizat ceva. Ce aș dori să împărtășesc cu alți dezvoltatori. Aceasta nu este metoda preferată de a face acest lucru, dar din punct de vedere al cunoștințelor, postez răspunsul meu.
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>';
Sper că va ajuta pe cineva.
În plus:
Este mai bine să folosiți prefixul tabelelor WordPress pentru a evita problemele în cazul mai multor site-uri web sau în timpul migrării etc.
global $wpdb;
$table_name = $wpdb->prefix . 'table_name';
