Моя реализация в приложении похожа на мой веб-сайт WooCommerce. Я хочу набрать следующие баллы для расчета доставки:
- Проверьте, требуется ли адрес для расчета адреса доставки?
- Если адрес введен пользователем, как проверить, попадает ли этот адрес между crieteria метода доставки? Выдает ошибку пользователю, если введенный адрес недействителен согласно способу доставки.
- Как только пользователь введет действительный адрес, рассчитайте стоимость всех способов доставки.
- Показать все способы доставки пользователю в приложении с его стоимостью при выбранном способе по умолчанию.
- Когда пользователь переключается между способами доставки, он также должен сохранять данные и синхронизироваться с веб-сайтом и получать общее количество корзин согласно выбранному методу.
До сих пор я достигаю пункта 4. Я могу рассчитать все способы доставки через веб-сайт, но если он не рассчитан через веб-сайт, он возвращает меня в ноль.
Вот мой код API:
function register_get_cart_shipping() {
register_rest_route(
'custom-plugin', '/getCartShipping/',
array(
'methods' => ['GET'],
'callback' => 'getCartShipping',
)
);
function getCartShipping() {
$chosen_methods = WC()->session->get('chosen_shipping_methods');
$count = 0;
foreach( WC()->session->get('shipping_for_package_0')['rates'] as $method_id => $rate ){
$data[$count]->rate_id = $rate->id;
$data[$count]->method_id = $rate->method_id;
$data[$count]->instance_id = $rate->instance_id;
$data[$count]->label = $rate->label;
$data[$count]->cost = $rate->cost;
$data[$count]->taxes = $rate->taxes;
$data[$count]->chosen = $chosen_methods['rate_id'];
if($chosen_methods['rate_id'] == $rate->id ){
$data[$count]->isSelected = true;
} else {
$data[$count]->isSelected = false;
}
$count++;
}
return $data;
}
}
Также для пункта 5, когда пользователь переключается между способами доставки, я использую этот код, но он не обновляет выбранный способ доставки на веб-сайте. Вот код:
function updateCartShipping($request) {
$rate_id["rate_id"] = "table_rate:10:4";
// $rate_id["rate_id"] = "table_rate:9:3";
// $rate_id["rate_id"] = $request['shippingID'];
WC()->session->set('chosen_shipping_methods', $rate_id);
return "OK";
}
Я также не знаю, какой идентификатор метода установить в качестве метода доставки. Это кажется мне загадочным.
Любая помощь будет оценена. Спасибо!