wc_update_order_item_meta() – обновляет метаданные позиции заказа

Функция позволяет изменить какие-либо метаданные позиции заказа WooCommerce, например цену или даже ID товара, к которому она прикреплена. Если метаданных с указанным ключом не существует, то они будут добавлены.

Возвращает true, если обновление/добавление прошло успешно, иначе – false.

wc_update_order_item_meta( $item_id, $meta_key, $meta_value, $prev_value );

Параметры wc_update_order_item_meta()

$item_id
(целое число) ID позиции заказа, его кстати можно получить из самого заказа при помощи метода get_items(), подробнее тут.
$meta_key
(строка) Ключ метаданных.
$meta_value
Новое значение метаданных.
$prev_value
Иногда метаданных с одним и тем же ключом может быть несколько, в таких случаях мы можем обновить только определённые метаданные, чьё значение до изменения равно этому параметру.

Пример

В качестве примера попробуем изменить цену доставки в заказе с определённым ID.

$order_id = 5;
$order = wc_get_order( $order_id );
$order_items = $order->get_items( array( 'shipping' ) );
 
foreach( $order_items as $item_id => $order_item ) {
	wc_update_order_item_meta( $item_id, 'cost', 500 );
}
 
$order->calculate_totals();
  • Прежде всего мы используем метод get_items() объекта заказа WC_Order для получения всех позиций заказа, связанных с доставкой (для этого в качестве параметра передаём значение shipping).
  • cost – это предопределённое значение мета-ключа, отвечающего за цену доставки, полный список зарезервированных ключей вы найдёте здесь.
  • При изменении цен позиций заказа всегда делаем его перерасчёт методом $order->calculate_totals().

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Если вам нужна помощь с сайтом или разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда будем рады вам помочь!

Оставить комментарий

Если вы хотите добавить код, не забудьте обернуть его в <pre lang="php"></pre>, если же код – меньше одной строчки, то можно и в <code></code>.