WooCommerce: aggiungere metadati diversi per ogni articolo nell'ordine

23 feb 2019, 11:11:38
Visualizzazioni: 13.5K
Voti: 3

Con questa funzione posso aggiungere nuovi metadati personalizzati a tutti gli articoli dell'ordine.

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);
}

Ma come posso aggiungere metadati diversi per ogni articolo dell'ordine? Ad esempio, ho bisogno di aggiungere il prezzo di ogni prodotto come order_itemmeta.

0
Tutte le risposte alla domanda 1
0

Prova, woocommerce_checkout_create_order_line_item Dispone di 4 argomenti disponibili ed è utilizzabile a partire dalla versione WooCommerce 3.3+.

  • $item è un'istanza della nuova classe WC_Order_Item_Product
  • $cart_item_key è la chiave hash univoca dell'elemento del carrello
  • $values rappresenta l'elemento del carrello
  • $order un'istanza dell'oggetto WC_Order (Questo è un argomento aggiuntivo molto utile in alcuni casi specifici)

In questo hook sostituiremo le vecchie funzioni operative wc_add_order_item_meta() con il nuovo metodo WC_Data update_meta_data() da utilizzare con l'argomento $item.

Esempio:

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 ) {
    // Recupera il valore di un campo personalizzato del prodotto
    $custom_field_value = get_post_meta( $item->get_product_id(), '_meta_key', true );
    // Aggiorna i metadati dell'elemento dell'ordine
    if ( ! empty( $custom_field_value ) ){
        $item->update_meta_data( 'meta_key1', $custom_field_value );
    }
    // … … Oppure … …

    // Recupera i dati personalizzati dell'elemento del carrello e aggiorna i metadati dell'elemento dell'ordine
    if( isset( $values['custom_data'] ) ) {
        $item->update_meta_data( 'meta_key2', $values['custom_data'] );
    }
}
23 feb 2019 14:26:24