WooCommerce: Adăugare meta personalizată diferită pentru fiecare produs din comandă

23 feb. 2019, 11:11:38
Vizualizări: 13.5K
Voturi: 3

Cu această funcție pot adăuga meta personalizată pentru toate produsele dintr-o comandă.

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

Dar cum pot adăuga meta diferită pentru fiecare produs din comandă? De exemplu, am nevoie să adaug prețul fiecărui produs ca order_itemmeta.

0
Toate răspunsurile la întrebare 1
0

Încearcă, woocommerce_checkout_create_order_line_item Are 4 argumente disponibile și este disponibil începând cu versiunea WooCommerce 3.3+.

  • $item este o instanță a noii clase introduse WC_Order_Item_Product
  • $cart_item_key este cheia unică hash a articolului din coș
  • $values este articolul din coș
  • $order o instanță a obiectului WC_Order (Acesta este un argument suplimentar foarte util în anumite cazuri specifice)

În acest hook vom înlocui vechile funcții care funcționau wc_add_order_item_meta() cu noua metodă WC_Data update_meta_data() care trebuie folosită cu argumentul $item.

Exemplu:

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 ) {
    // Obține valoarea unui câmp personalizat al produsului
    $custom_field_value = get_post_meta( $item->get_product_id(), '_meta_key', true );
    // Actualizează metadatele articolului din comandă
    if ( ! empty( $custom_field_value ) ){
        $item->update_meta_data( 'meta_key1', $custom_field_value );
    }
    // … … Sau … …

    // Obține datele personalizate din articolul coșului și actualizează metadatele articolului din comandă
    if( isset( $values['custom_data'] ) ) {
        $item->update_meta_data( 'meta_key2', $values['custom_data'] );
    }
}
23 feb. 2019 14:26:24