Cómo obtener información de productos en pedidos de WooCommerce

4 mar 2015, 00:14:52
Vistas: 46.2K
Votos: 7

Estoy tratando de obtener todos los pedidos de WooCommerce y encontrar información sobre los productos en cada pedido. He visto muchos ejemplos aquí y en otros lugares de la web y todos parecen decir que hay que hacer lo mismo, pero no está funcionando. Estoy usando WordPress 4.1.1 y WooCommerce 2.3.3, aquí está mi código:

$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);
    }
}

El problema es que cuando hago print_r($lineItem) solo hay tres propiedades, de las cuales solo dos están siempre pobladas. Un típico resultado de print_r($lineItem) se ve así:

Array ( 
    [name] => Toalla Fouta – Gris Perla & Rayas Blancas 
    [type] => line_item 
    [item_meta] => 
)

¿Cómo puedo obtener el resto de la información sobre este artículo del pedido, por ejemplo, el ID del producto, si es un producto simple/variable, etc?

0
Todas las respuestas a la pregunta 1
2

He probado tu código y funciona correctamente, de hecho también muestra los detalles de cada producto en los pedidos. El código que probé fue:

$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) {

        //descomenta lo siguiente para ver todos los datos
        //        echo '<pre>';
        //        print_r($lineItem);
        //        echo '</pre>';
        echo '<br>' . 'Nombre del Producto : ' . $lineItem['name'] . '<br>';
        echo 'ID del Producto : ' . $lineItem['product_id'] . '<br>';
        if ($lineItem['variation_id']) {
            echo 'Tipo de Producto : Producto Variable' . '<br>';
        } else {
            echo 'Tipo de Producto : Producto Simple' . '<br>';
        }
    }
}

Y el resultado que obtuve fue el siguiente:

Resultado de la consulta de pedidos en WooCommerce

Prueba este código y dime cómo te funciona

26 jun 2015 07:53:46
Comentarios

funciona pero crea problemas cuando intento usarlo dentro de la clase... y cuando accedo a él me lanza Uncaught Exception: Invalid order

User User
16 oct 2018 22:58:16

también $loop->the_post(); ¿es requerido?

User User
16 oct 2018 22:58:55