Ottenere l'ID del prodotto dall'ID dell'ordine in WooCommerce

25 apr 2013, 10:57:33
Visualizzazioni: 171K
Voti: 47

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.

0
Tutte le risposte alla domanda 2
7
97

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'];
}
25 apr 2013 19:13:36
Commenti

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

rnevius rnevius
9 nov 2015 19:34:43

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).

Ewout Ewout
10 nov 2015 16:25:37

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

That Realtor Programmer Guy That Realtor Programmer Guy
20 ott 2017 20:40:27

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

That Realtor Programmer Guy That Realtor Programmer Guy
22 nov 2017 21:46:08

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

Ewout Ewout
27 nov 2017 15:44:58

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

That Realtor Programmer Guy That Realtor Programmer Guy
19 dic 2017 06:02:19

Nota che in molti template di WooCommerce la variabile $order esiste già

Chris Pink Chris Pink
20 set 2021 13:24:10
Mostra i restanti 2 commenti
2

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'; 
25 apr 2013 20:19:04
Commenti

@ErenorPaz Grazie, ho aggiunto contenuto nella risposta, in risposta al tuo commento :)

Arslaan Ejaz Arslaan Ejaz
25 ott 2016 11:33:52

Grazie per la rapida risposta, anche su un thread vecchio! Eliminerò i miei commenti precedenti, visto che ora sono obsoleti :)

Erenor Paz Erenor Paz
25 ott 2016 13:40:15