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.
Метод класса: WC_REST_Orders_V2_Controller{}
Хуки из метода
Возвращает
null. Ничего (null).
Использование
// protected - в коде основоного (родительского) или дочернего класса $result = $this->set_item( $order, $item_type, $posted );
- $order(WC_Order) (обязательный)
- order object.
- $item_type(строка) (обязательный)
- The item type.
- $posted(массив) (обязательный)
- item provided in the request body.
Код WC_REST_Orders_V2_Controller::set_item() WC REST Orders V2 Controller::set item WC 10.3.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
);
}
}
}