WooCommerce: добавление разных метаданных для каждого товара в заказе
23 февр. 2019 г., 11:11:38
Просмотры: 13.5K
Голосов: 3
Сейчас с этой функцией я могу добавить новые пользовательские метаданные заказа ко всем товарам в заказе.
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);
}
Но как я могу добавить разные метаданные заказа для каждого товара в заказе? Например, мне нужно добавить цену каждого продукта как order_itemmeta.

Hossein
31
Все ответы на вопрос
1
0
Попробуйте использовать хук woocommerce_checkout_create_order_line_item
. Он принимает 4 аргумента и доступен начиная с WooCommerce версии 3.3+.
$item
- экземпляр нового классаWC_Order_Item_Product
$cart_item_key
- уникальный хэш-ключ элемента корзины$values
- данные элемента корзины$order
- экземпляр объектаWC_Order
(очень полезный дополнительный аргумент в некоторых случаях)
В этом хуке мы заменим старые рабочие функции wc_add_order_item_meta()
на новый метод WC_Data update_meta_data()
, который используется с аргументом $item
.
Пример:
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 ) {
// Получаем значение произвольного поля товара
$custom_field_value = get_post_meta( $item->get_product_id(), '_meta_key', true );
// Обновляем метаданные элемента заказа
if ( ! empty( $custom_field_value ) ){
$item->update_meta_data( 'meta_key1', $custom_field_value );
}
// … … Или … …
// Получаем пользовательские данные из корзины и обновляем метаданные элемента заказа
if( isset( $values['custom_data'] ) ) {
$item->update_meta_data( 'meta_key2', $values['custom_data'] );
}
}

Jaydip Nimavat
224
23 февр. 2019 г. 14:26:24
Похожие вопросы
2
ответов