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.

0
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 clase WC_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 objeto WC_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'] );
    }
}
23 feb 2019 14:26:24