WordPress добавляет мета-ключ в корзину

#wordpress #woocommerce

Вопрос:

поскольку я пытаюсь добавить еще одну дополнительную информацию, чтобы я мог извлекать и фильтровать данные в соответствии с метаданными после успешной оплаты. Позвольте мне объяснить, используя код.

  $cart_data = array(
                'product_id' => $product_id,
                'payment_type' => 'subscription',
                '**what_is_being_promoted**' => $promoting,

            );
    WC()->cart->add_to_cart($product_id, 1, null, null, $cart_item_data);
 

теперь я хотел бы прочитать ключ «what_is_being_promoted» в крючке classifier_update_user_data_upon_payment.
как этого добиться.

Ответ №1:

Вы можете использовать приведенные ниже фильтры/действия для добавления дополнительных данных в корзину:

 //Add custom cart item data
function zwtadd_cart_item_data( $cart_item_data, $product_id, $variation_id ) {
    if( isset( $_POST['what_is_being_promoted'] ) ) {
        $cart_item_data['zwt_field'] = sanitize_text_field( $_POST['what_is_being_promoted'] );
    }
    return $cart_item_data;
}
add_filter( 'woocommerce_add_cart_item_data', 'zwtadd_cart_item_data', 10, 3 );


//Display custom item data in the cart
function zwt_get_item_data( $item_data, $cart_item_data ) {
    if( isset( $cart_item_data['zwt_field'] ) ) {
    $item_data[] = array(
        'key' => __( 'Is promoted', 'text-domain' ),
        'value' => wc_clean( $cart_item_data['zwt_field'] )
    );
    }
    return $item_data;
}
add_filter( 'woocommerce_get_item_data', 'zwt_get_item_data', 10, 2 );

//Add custom meta to order
function zwt_checkout_create_order_line_item( $item, $cart_item_key, $values, $order ) {
    if( isset( $values['zwt_field'] ) ) {
        $item->add_meta_data(__( 'Is promoted', 'text-domain' ), $values['zwt_field'], true);
    }
}
add_action( 'woocommerce_checkout_create_order_line_item', 'zwt_checkout_create_order_line_item', 10, 4 );
 

Приведенный выше код добавит данные в товар корзины, отобразит данные в корзине и то же самое отобразится в заказе.