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.

Hossein
31
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 classeWC_Order_Item_Product
$cart_item_key
è la chiave hash univoca dell'elemento del carrello$values
rappresenta l'elemento del carrello$order
un'istanza dell'oggettoWC_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'] );
}
}

Jaydip Nimavat
224
23 feb 2019 14:26:24
Domande correlate
2
risposte