WC_REST_Orders_V2_Controller::set_item()
Wrapper method to create/update order items. When updating, the item ID provided is checked to ensure it is associated with the order.
Method of the class: WC_REST_Orders_V2_Controller{}
Hooks from the method
Returns
null
. Nothing (null).
Usage
// protected - for code of main (parent) or child class $result = $this->set_item( $order, $item_type, $posted );
- $order(WC_Order) (required)
- order object.
- $item_type(string) (required)
- The item type.
- $posted(array) (required)
- item provided in the request body.
WC_REST_Orders_V2_Controller::set_item() WC REST Orders V2 Controller::set item code WC 9.8.5
protected function set_item( $order, $item_type, $posted ) { global $wpdb; if ( ! empty( $posted['id'] ) ) { $action = 'update'; } else { $action = 'create'; } $method = 'prepare_' . $item_type; $item = null; // Verify provided line item ID is associated with order. if ( 'update' === $action ) { $item = $order->get_item( absint( $posted['id'] ), false ); if ( ! $item ) { throw new WC_REST_Exception( 'woocommerce_rest_invalid_item_id', __( 'Order item ID provided is not associated with order.', 'woocommerce' ), 400 ); } } // Prepare item data. $item = $this->$method( $posted, $action, $item ); /** * Allow extensions be notified before the item is saved. * * @param WC_Order_Item $item The item object. * @param array $posted The item data. * * @since 4.5.0. */ do_action( 'woocommerce_rest_set_order_item', $item, $posted ); // If creating the order, add the item to it. if ( 'create' === $action ) { $order->add_item( $item ); } else { $item->save(); } // Maybe update product stock quantity. if ( 'line_items' === $item_type && in_array( $order->get_status(), array( OrderStatus::PROCESSING, OrderStatus::COMPLETED, OrderStatus::ON_HOLD ), true ) ) { require_once WC_ABSPATH . 'includes/admin/wc-admin-functions.php'; $changed_stock = wc_maybe_adjust_line_item_product_stock( $item ); if ( $changed_stock && ! is_wp_error( $changed_stock ) ) { $order->add_order_note( sprintf( // translators: %s item name. __( 'Adjusted stock: %s', 'woocommerce' ), sprintf( '%1$s (%2$s→%3$s)', $item->get_name(), $changed_stock['from'], $changed_stock['to'] ) ), false, true ); } } }