WC_Abstract_Order::save_itemsprotectedWC 1.0

Save all order items which are part of this order.

Метод класса: WC_Abstract_Order{}

Хуков нет.

Возвращает

null. Ничего (null).

Использование

// protected - в коде основоного (родительского) или дочернего класса
$result = $this->save_items();

Код WC_Abstract_Order::save_items() WC 10.5.2

protected function save_items() {
	$items_changed = false;

	foreach ( $this->items_to_delete as $item ) {
		$item->delete();
		$items_changed = true;
	}
	$this->items_to_delete = array();

	// Add/save items.
	foreach ( $this->items as $item_group => $items ) {
		if ( is_array( $items ) ) {
			$items = array_filter( $items );
			foreach ( $items as $item_key => $item ) {
				$item->set_order_id( $this->get_id() );

				$item_id = $item->save();

				// If ID changed (new item saved to DB)...
				if ( $item_id !== $item_key ) {
					$this->items[ $item_group ][ $item_id ] = $item;

					unset( $this->items[ $item_group ][ $item_key ] );

					$items_changed = true;
				}
			}
		}
	}

	if ( $items_changed ) {
		delete_transient( 'wc_order_' . $this->get_id() . '_needs_processing' );

		// Invalidate the order cache to prevent stale item data.
		// This fixes a race condition where get_items() may have been called
		// before items were saved, caching empty items arrays.
		// See https://github.com/woocommerce/woocommerce/issues/62173.
		if ( OrderUtil::orders_cache_usage_is_enabled() ) {
			wc_get_container()->get( OrderCache::class )->remove( $this->get_id() );
		}
	}
}