/** * Add a shipping row to the order. * @param WC_Shipping_Rate shipping_rate * @return int order item ID */ public function add_shipping($shipping_rate) { _deprecated_function('WC_Order::add_shipping', '2.7', 'Create new WC_Order_Item_Shipping object and add to order with WC_Order::add_item()'); $item = new WC_Order_Item_Shipping(array('method_title' => $shipping_rate->label, 'method_id' => $shipping_rate->id, 'total' => wc_format_decimal($shipping_rate->cost), 'taxes' => $shipping_rate->taxes, 'meta_data' => $shipping_rate->get_meta_data(), 'order_id' => $this->get_id())); $item->save(); $this->add_item($item); wc_do_deprecated_action('woocommerce_order_add_shipping', array($this->get_id(), $item->get_id(), $shipping_rate), '2.7', 'Use woocommerce_new_order_item action instead.'); return $item->get_id(); }
/** * Create or update an order shipping method * * @since 2.2 * @param \WC_Order $order * @param array $shipping item data * @param string $action 'create' to add shipping or 'update' to update it * @throws WC_API_Exception invalid data, server error */ protected function set_shipping($order, $shipping, $action) { // total must be a positive float if (isset($shipping['total']) && floatval($shipping['total']) < 0) { throw new WC_API_Exception('woocommerce_invalid_shipping_total', __('Shipping total must be a positive amount', 'woocommerce'), 400); } if ('create' === $action) { // method ID is required if (!isset($shipping['method_id'])) { throw new WC_API_Exception('woocommerce_invalid_shipping_item', __('Shipping method ID is required', 'woocommerce'), 400); } $rate = new WC_Shipping_Rate($shipping['method_id'], isset($shipping['method_title']) ? $shipping['method_title'] : '', isset($shipping['total']) ? floatval($shipping['total']) : 0, array(), $shipping['method_id']); $item = new WC_Order_Item_Shipping(); $item->set_shipping_rate($rate); $shipping_id = $item->save(); if (!$shipping_id) { throw new WC_API_Exception('woocommerce_cannot_create_shipping', __('Cannot create shipping method, try again', 'woocommerce'), 500); } } else { $item = new WC_Order_Item_Shipping($shipping['id']); if (isset($shipping['method_id'])) { $item->set_method_id($shipping['method_id']); } if (isset($shipping['method_title'])) { $item->set_method_title($shipping['method_title']); } if (isset($shipping['total'])) { $item->set_total(floatval($shipping['total'])); } $shipping_id = $item->save(); if (!$shipping_id) { throw new WC_API_Exception('woocommerce_cannot_update_shipping', __('Cannot update shipping method, try again', 'woocommerce'), 500); } } }
/** * Add order shipping cost via ajax. */ public static function add_order_shipping() { check_ajax_referer('order-item', 'security'); if (!current_user_can('edit_shop_orders')) { die(-1); } try { $order_id = absint($_POST['order_id']); $order = wc_get_order($order_id); $order_taxes = $order->get_taxes(); $shipping_methods = WC()->shipping() ? WC()->shipping->load_shipping_methods() : array(); // Add new shipping $item = new WC_Order_Item_Shipping(); $item->set_shipping_rate(new WC_Shipping_Rate()); $item->set_order_id($order_id); $item_id = $item->save(); ob_start(); include 'admin/meta-boxes/views/html-order-shipping.php'; wp_send_json_success(array('html' => ob_get_clean())); } catch (Exception $e) { wp_send_json_error(array('error' => $e->getMessage())); } }