WooCommerce: agregar meta datos diferentes para cada artículo en un pedido
23 feb 2019, 11:11:38
Vistas: 13.5K
Votos: 3
Actualmente con esta función puedo agregar nuevos metadatos personalizados a todos los artículos del pedido.
add_action( 'woocommerce_add_order_item_meta', 'add_order_item_meta', 10, 2 );
function add_order_item_meta($item_id, $values) {
$key = '_key';
$value = '_value';
wc_update_order_item_meta($item_id, $key, $value);
}
Pero ¿cómo puedo agregar metadatos diferentes para cada artículo del pedido? Por ejemplo, necesito agregar el precio de cada producto como order_itemmeta.

Hossein
31
Todas las respuestas a la pregunta
1
0
Prueba,
woocommerce_checkout_create_order_line_item
Tiene 4 argumentos disponibles y está disponible a partir de la versión WooCommerce 3.3+.
$item
es una instancia de la nueva claseWC_Order_Item_Product
$cart_item_key
es la clave hash única del artículo del carrito$values
es el artículo del carrito$order
una instancia del objetoWC_Order
(Este es un argumento adicional muy útil en algunos casos específicos)
En este hook reemplazaremos las antiguas funciones de trabajo wc_add_order_item_meta()
por el nuevo método WC_Data update_meta_data()
para ser usado con el argumento $item
.
Ejemplo:
add_action( 'woocommerce_checkout_create_order_line_item', 'custom_checkout_create_order_line_item', 20, 4 );
function custom_checkout_create_order_line_item( $item, $cart_item_key, $values, $order ) {
// Obtener el valor de un campo personalizado del producto
$custom_field_value = get_post_meta( $item->get_product_id(), '_meta_key', true );
// Actualizar metadatos del artículo del pedido
if ( ! empty( $custom_field_value ) ){
$item->update_meta_data( 'meta_key1', $custom_field_value );
}
// … … O … …
// Obtener datos personalizados del artículo del carrito y actualizar metadatos del artículo del pedido
if( isset( $values['custom_data'] ) ) {
$item->update_meta_data( 'meta_key2', $values['custom_data'] );
}
}

Jaydip Nimavat
224
23 feb 2019 14:26:24
Preguntas relacionadas
1
respuestas
2
respuestas
4
respuestas