Come ottenere le informazioni sui prodotti degli ordini WooCommerce

4 mar 2015, 00:14:52
Visualizzazioni: 46.2K
Voti: 7

Sto cercando di ottenere tutti gli ordini WooCommerce e trovare informazioni sui prodotti in ciascun ordine. Ho visto molti esempi qui e altrove sul web e sembrano tutti suggerire la stessa cosa ma non funziona. Sto usando WordPress 4.1.1 e WooCommerce 2.3.3, ecco il mio codice:

$filters = array(
    'post_status' => 'any',
    'post_type' => 'shop_order', 
    'posts_per_page' => 200,
    'paged' => 1,
    'orderby' =>'modified',
    'order' => 'ASC'
);

$loop = new WP_Query( $filters );

while ( $loop->have_posts() ) {
    $loop->the_post();
    $order = new WC_Order($loop->post->ID);

    foreach ($order->get_items() as $key => $lineItem) {
        print_r($lineItem);
    }
}

Il problema è che quando eseguo print_r($lineItem) ci sono solo tre proprietà di cui solo due sono popolate. Un tipico print_r($lineItem) appare così:

Array ( 
    [name] => Asciugamano Fouta – Grigio Perla & Strisce Bianche 
    [type] => line_item 
    [item_meta] => 
)

Come posso ottenere il resto delle informazioni su questo elemento dell'ordine, ad esempio l'ID del prodotto, se è un prodotto singolo / variabile ecc?

0
Tutte le risposte alla domanda 1
2

Ho provato il tuo codice e funziona bene, infatti mostra anche i dettagli di ogni prodotto negli ordini. Il codice che ho provato è:

$filters = array(
    'post_status' => 'any',
    'post_type' => 'shop_order',
    'posts_per_page' => 200,
    'paged' => 1,
    'orderby' => 'modified',
    'order' => 'ASC'
);

$loop = new WP_Query($filters);

while ($loop->have_posts()) {
    $loop->the_post();
    $order = new WC_Order($loop->post->ID);

    foreach ($order->get_items() as $key => $lineItem) {

        // decommenta quanto segue per vedere tutti i dati
        //        echo '<pre>';
        //        print_r($lineItem);
        //        echo '</pre>';
        echo '<br>' . 'Nome Prodotto : ' . $lineItem['name'] . '<br>';
        echo 'ID Prodotto : ' . $lineItem['product_id'] . '<br>';
        if ($lineItem['variation_id']) {
            echo 'Tipo Prodotto : Prodotto Variabile' . '<br>';
        } else {
            echo 'Tipo Prodotto : Prodotto Semplice' . '<br>';
        }
    }
}

E questo è l'output che ho ottenuto:

descrizione immagine

Prova questo codice e fammi sapere come funziona per te

26 giu 2015 07:53:46
Commenti

funziona ma crea problemi quando provo a usarlo all'interno della classe .. e quando ci accedo mi restituisce Uncaught Exception: Invalid order

User User
16 ott 2018 22:58:16

inoltre $loop->the_post(); è obbligatorio?

User User
16 ott 2018 22:58:55