Obtenga la identificación del producto de la identificación del pedido en Woocommerce [cerrado]

38

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

Intenté buscar wp_postmetapero no tuve suerte.

arslaan ejaz
fuente

Respuestas:

68

WooCommerce 3.0+

puede obtener los artículos de un pedido por

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

luego, si recorre los elementos, puede 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 comprobar cómo las páginas de pedidos de administrador obtienen los datos, ¡allí encontrarás muchas respuestas!

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'];
}
Ewout
fuente
A menos que me falte algo, esto no parece funcionar en la última versión de WooCommerce ...
rnevius
Todavía funciona en WooCommerce 2.4.8 para mí, pero necesita tener la variable $ order_id definida (a veces está en $ order-> id, dependiendo de su contexto).
Ewout
@mevius agregué una edición para 3+ con una función de envío para verificar múltiples productos
Garet Claborn
vea el historial de edición del despachador, esto no es bueno sin él, ya que consumirá su servidor sin sentido
Garet Claborn
@GaretClaborn que depende completamente de lo que esté haciendo con estos datos. "tal cual", este fragmento de ejemplo no es un desperdicio de memoria de ninguna manera.
Ewout
6

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

La esperanza ayudará a alguien.

Adicionalmente:

Es mejor usar el prefijo de tabla de WordPress para evitar problemas en múltiples sitios web o en la migración, etc.

global $wpdb;
$table_name = $wpdb->prefix . 'table_name'; 
arslaan ejaz
fuente
1
@ErenorPaz Gracias, agregué contenido en respuesta, en respuesta a tu comentario :)
arslaan ejaz
¡Gracias por la rápida respuesta, incluso en un hilo viejo! Eliminaré mis comentarios anteriores, ya que está desactualizado ahora :)
Erenor Paz