Ottenere l'ID del prodotto dall'ID dell'ordine in WooCommerce
Sto avendo problemi con la relazione tra i dettagli del prodotto e i dettagli dell'ordine in WooCommerce. Non riesco a trovare l'ID del prodotto relativo a un ID ordine nella pagina Visualizza Ordini del tema WooCommerce. Vorrei semplicemente ottenere il contenuto del prodotto e il permalink ecc. nella pagina Visualizza Ordini.
Ho provato a cercare in wp_postmeta
ma senza successo.

WooCommerce 3.0+
puoi ottenere gli elementi dell'ordine di un ordine con
$order = wc_get_order( $order_id );
$items = $order->get_items();
quindi, se cicli attraverso gli elementi, puoi ottenere tutti i dati rilevanti:
foreach ( $items as $item ) {
$product_name = $item->get_name();
$product_id = $item->get_product_id();
$product_variation_id = $item->get_variation_id();
}
un buon consiglio è controllare come le pagine di amministrazione degli ordini ottengono i dati, troverai molte risposte lì!
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'];
}

A meno che non mi stia sfuggendo qualcosa, questo non sembra funzionare nell'ultima versione di WooCommerce...

Per me funziona ancora in WooCommerce 2.4.8, ma devi avere la variabile $order_id definita (a volte è in $order->id, dipende dal contesto).

@mevius ho aggiunto una modifica per la versione 3+ con una funzione dispatch per verificare più prodotti

vedi la cronologia delle modifiche per il dispatcher, non va bene senza perché sprecherebbe inutilmente le risorse del tuo server

@GaretClaborn dipende interamente da cosa stai facendo con questi dati. 'così com'è', questo esempio di snippet non spreca memoria in alcun modo.

Se stai controllando più prodotti, stai ripetendo parecchia logica rispetto alla possibilità di sfruttare la prima esecuzione del loop

Ho lavorato su questo e ho ottenuto qualcosa che vorrei condividere con altri sviluppatori. Non è il modo preferito per farlo, ma per conoscenza pubblico la mia risposta.
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>';
Spero possa essere utile a qualcuno.
Inoltre:
È meglio utilizzare il prefisso delle tabelle di WordPress per evitare problemi in siti multipli o durante migrazioni ecc.
global $wpdb;
$table_name = $wpdb->prefix . 'table_name';
