Obtener el ID del producto desde el ID del pedido en Woocommerce

25 abr 2013, 10:57:33
Vistas: 171K
Votos: 47

Estoy teniendo problemas con la relación entre los detalles del producto y los detalles del pedido en Woocommerce. No puedo encontrar el ID del producto relacionado con el ID del pedido en la página de Ver Pedidos del tema de Woocommerce. Simplemente quiero obtener el contenido del producto y el enlace permanente, etc. en la página de Ver Pedidos.

Intenté buscar en wp_postmeta pero no tuve éxito.

0
Todas las respuestas a la pregunta 2
7
97

WooCommerce 3.0+

Puedes obtener los items de un pedido usando:

$order = wc_get_order( $order_id );
$items = $order->get_items();

Luego, si recorres los items, puedes obtener todos los datos relevantes:

foreach ( $items as $item ) {
    $product_name = $item->get_name();
    $product_id = $item->get_product_id();
    $product_variation_id = $item->get_variation_id();
}

Un buen consejo es revisar cómo las páginas de pedidos en el administrador obtienen los datos, ¡encontrarás muchas respuestas ahí!

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 abr 2013 19:13:36
Comentarios

A menos que me esté perdiendo algo, esto no parece funcionar en la última versión de WooCommerce...

rnevius rnevius
9 nov 2015 19:34:43

Sigue funcionando en WooCommerce 2.4.8 para mí, pero necesitas tener definida la variable $order_id (a veces está en $order->id, dependiendo de tu contexto).

Ewout Ewout
10 nov 2015 16:25:37

@mevius agregué una edición para 3+ con una función dispatch para verificar múltiples productos

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

ver el historial de ediciones para el dispatcher, esto no es bueno sin él ya que consumirá tu servidor innecesariamente

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

@GaretClaborn eso depende completamente de lo que estés haciendo con estos datos. 'tal cual', este fragmento de ejemplo no desperdicia memoria de ninguna manera.

Ewout Ewout
27 nov 2017 15:44:58

Si estás verificando múltiples productos entonces estás repitiendo bastante lógica en lugar de poder capitalizar la primera ejecución del bucle

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

Ten en cuenta que en muchas plantillas de WooCommerce $order ya existe

Chris Pink Chris Pink
20 sept 2021 13:24:10
Mostrar los 2 comentarios restantes
2

Trabajé en ello y logré algo que me gustaría compartir con otros desarrolladores. Esta no es la forma preferida de hacerlo, pero por conocimiento estoy publicando mi respuesta.

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>'; 

Espero que le sirva a alguien.

Adicionalmente:

Es mejor usar el prefijo de tablas de WordPress para evitar problemas en múltiples sitios web o en migraciones, etc.

global $wpdb;
$table_name = $wpdb->prefix . 'table_name'; 
25 abr 2013 20:19:04
Comentarios

@ErenorPaz Gracias, agregué contenido en la respuesta, como respuesta a tu comentario :)

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

¡Gracias por la rápida respuesta, incluso en un hilo antiguo! Eliminaré mis comentarios previos, ya que ahora están desactualizados :)

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