php - pedidos - woocommerce import orders
¿Cómo obtener pedidos de ids de productos para obtener metadatos de productos? (6)
Estoy tratando de extraer el meta valor del artículo de las órdenes de Woocommerce usando:
$data = wc_get_order_item_meta( $item, ''_tmcartepo_data'', true );
Sin embargo, no puedo encontrar una manera de obtener order_item_id como el primer parámetro (usando get_items)
global $woocommerce, $post, $wpdb;
$order = new WC_Order($post->ID);
$items = $order->get_items();
foreach ( $items as $item ) {
$item_id = $item[''order_item_id'']; //???
$data = wc_get_order_item_meta( $item_id, ''_tmcartepo_data'', true );
$a = $data[0][''value''];
$b = $data[1][''value''];
echo $a;
echo $b;
}
Y me refiero a esta orden item_id (1 y 2)
Order_item_id en la base de datos - Imagen
¿Cómo puedo poner eso?
Gracias.
foreach ( $order->get_items() as $key => $item ) {
$data = wc_get_order_item_meta( $key, ''_tmcartepo_data'' );
...
Me gustó esta solución, cambie "_tmcartepo_data" por su meta_key.
Utilice este <pre><?php print_r($items); ?></pre>
<pre><?php print_r($items); ?></pre>
para verificar todos los contenidos de $ items array / object.
Tarde en la fiesta, pero trabajando con el mismo punto con el complemento TM Extra Product Options, creo que esto es lo que responde a su pregunta:
$order = wc_get_order( $post->ID );
$items = $order->get_items();
foreach( $items as $item ){
$data = unserialize($item[''item_meta''][''_tmcartepo_data''][0]);
$a = $data[0][''value''];
$b = $data[1][''value''];
echo $a;
echo $b;
}
Probado y funciona en mi caso.
Al hacer el foreach en $order->get_items()
, su clave es en realidad la ID de línea de pedido. Asi que:
foreach ( $order->get_items() as $key => $item ) {
$data = wc_get_order_item_meta( $key, ''_tmcartepo_data'' );
...
}
Actualización (compatibilidad para woocommerce 3+)
Necesita $item[''product_id'']
para obtener su ID de artículo (ID de producto) en el bucle foreach para una orden WC y para obtener algunos metadatos de este producto debe usar la función get_post_meta()
(pero NO wc_get_order_item_meta()
) . Para los valores de matriz, no use el tercer argumento en get_post_meta () (ya que su argumento predeterminado es falso para los valores de matriz).
Así que aquí está tu código:
global $post;
$order = wc_get_order( $post->ID );
$items = $order->get_items();
foreach ( $order->get_items() as $item ) {
// Compatibility for woocommerce 3+
$product_id = version_compare( WC_VERSION, ''3.0'', ''<'' ) ? $item[''product_id''] : $item->get_product_id();
// Here you get your data (without "true" argument as it is an array)
$data = get_post_meta( $product_id, ''_tmcartepo_data'');
// To test data output (uncomment the line below)
// print_r($data);
echo $data[0][''value''];
echo ''<br>''; // to separate values
echo $data[1][''value''];
}
El código va en el archivo function.php de su tema hijo activo (o tema) o también en cualquier archivo de complemento.
Este código está probado y funciona.
Referencia relacionada con datos en pedidos:
Una forma simple de obtener pedidos de la base de datos;
/**
* @param $order_id
*
* @return array|null|object
*/
function get_order_items( $order_id ) {
global $wpdb, $table_prefix;
$items = $wpdb->get_results( "SELECT * FROM `{$table_prefix}woocommerce_order_items` WHERE `order_id` = {$order_id}" );
$item_name = array();
foreach ( $items as $item ) {
$item_name[] = $item->order_item_name;
}
return $item_name;
}