WC_Abstract_Order::add_item │ public │ WC 3.0.0

Adds an order item to this order. The order item will not persist until save.

Method of the class: WC_Abstract_Order{}

No Hooks.

Returns

false|void.

Usage

$WC_Abstract_Order = new WC_Abstract_Order();
$WC_Abstract_Order->add_item( $item );
$item(WC_Order_Item) (required)
Order item object (product, shipping, fee, coupon, tax).

Changelog

Since 3.0.0 Introduced.

WC_Abstract_Order::add_item() code WC 11.1.2

public function add_item( $item ) {
	$items_key = $this->get_items_key( $item );

	if ( ! $items_key ) {
		return false;
	}
	// Make sure existing items are loaded so we can append this new one.
	if ( ! isset( $this->items[ $items_key ] ) ) {
		$this->items[ $items_key ] = $this->get_items( $item->get_type() );
	}

	// Set parent.
	$item instanceof WC_Order_Item ? $item->set_order( $this ) : $item->set_order_id( $this->get_id() );

	// Append new row with generated temporary ID.
	$item_id = $item->get_id();

	if ( $item_id ) {
		$this->items[ $items_key ][ $item_id ] = $item;

		// Scrub this item from deferred bulk deletion snapshots, in case it was removed and then re-added before save().
		$this->item_ids_to_bulk_delete = array_values(
			array_filter(
				$this->item_ids_to_bulk_delete,
				static fn( $deleted_item_id ) => $deleted_item_id !== $item_id
			)
		);

		foreach ( $this->item_ids_to_bulk_delete_by_type as $type => $item_ids ) {
			$this->item_ids_to_bulk_delete_by_type[ $type ] = array_values(
				array_filter(
					$item_ids,
					static fn( $deleted_item_id ) => $deleted_item_id !== $item_id
				)
			);
		}
	} else {
		$this->items[ $items_key ][ 'new:' . $items_key . $this->temp_item_id_counter++ ] = $item;
	}
}