WooCommerce Admin Создать заказ & amp; Добавление доставки на оплату заказа

Я создаю заказ в админке. Я добавил некоторые функции на страницу оплаты заказа, которая отправляется клиенту (form-pay.php). Я добавил возможность удалять товары из заказа, а также обновлять данные для выставления счетов и доставки (как для заказа, так и для аккаунта). Я использую ajax и Calculate_totals () после удаления элемента, который работает.

Тем не менее, я не могу понять, как применить доставку к заказу. Мне нужно, чтобы это происходило при создании заказа в админе и когда кто-то удаляет элемент в интерфейсе.

Я попытался просто установить мету доставки, но это не работает.

    function my_order_update_shipping($order_id, $items) {

$order = wc_get_order($order_id);
$order_subtotal = $order->get_subtotal();

if($order_subtotal > '17.99'){
update_post_meta($order_id, '_order_shipping', '0');
}else{
update_post_meta($order_id, '_order_shipping', '4');
}
}

add_action('woocommerce_before_save_order_items', 'my_order_update_shipping');

Как мне этого добиться? Или применить способ доставки таким образом?

0

Решение

Я наконец понял это. Работает хорошо, но вам нужно нажать кнопку «пересчитать» при добавлении / удалении элемента в админ> создать заказ. Приведенный ниже код применяет 1 из 2 способов доставки на основе статической суммы промежуточного итога.

$delivery_zones = WC_Shipping_Zones::get_zones();

foreach ((array) $delivery_zones as $key => $the_zone) {
$shipping_methods = $the_zone['shipping_methods'];
}

// Apply Correct Shipping Method

if ($order_subtotal > '17.99') {
$rate = $shipping_methods[2];
$item = new WC_Order_Item_Shipping();
$item->set_props(array('method_id' => $rate->id, 'total' => wc_format_decimal($rate->cost)));
$order->add_item($item);
} else {
$rate = $shipping_methods[1];
$item = new WC_Order_Item_Shipping();
$item->set_props(array('method_id' => $rate->id, 'total' => wc_format_decimal($rate->cost)));
$order->add_item($item);
}

$order->calculate_totals();
$order->save();
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector