Я установил плагин для расчета стоимости доставки на странице одного продукта.Плагин добавляет продукт в корзину, рассчитывает стоимость доставки (вся корзина + этот продукт), а затем удаляет его.
Я хочу рассчитать стоимость доставки только для этого продукта (должно быть что-то вроде копирования правильной корзины, пустая корзина, добавить этот продукт в корзину, рассчитать доставку, очистить корзину, откатить корзину из копии?) У кого-нибудь есть предложения, как изменить приведенный выше код для расчета только для текущего продукта?
/* function for calculate shiiping */
public function get_shipping_text($shipping_method, $country)
{
global $woocommerce, $post;
$returnResponse = array();
WC_Shortcode_Cart::calculate_shipping();
if (isset($_POST["product_id"]) && $this->check_product_incart($_POST["product_id"]) === false) {
$qty = (isset($_POST['current_qty']) && $_POST['current_qty'] > 0) ? $_POST['current_qty'] : 1;
if (isset($_POST['variation_id']) && $_POST['variation_id'] != "" && $_POST['variation_id'] > 0) {
$cart_item_key = WC()->cart->add_to_cart(sanitize_text_field($_POST["product_id"]), $qty, sanitize_text_field($_POST['variation_id']));
} else {
$cart_item_key = WC()->cart->add_to_cart(sanitize_text_field($_POST["product_id"]), $qty);
}
$packages = WC()->cart->get_shipping_packages();
$packages = WC()->shipping->calculate_shipping($packages);
$packages = WC()->shipping->get_packages();
WC()->cart->remove_cart_item($cart_item_key);
} else {
$packages = WC()->cart->get_shipping_packages();
$packages = WC()->shipping->calculate_shipping($packages);
$packages = WC()->shipping->get_packages();
}
wc_clear_notices();
if (isset($packages[0]["rates"][$shipping_method])) {
$selectedShiiping = $packages[0]["rates"][$shipping_method];
$returnResponse = array("label" => $selectedShiiping->label, "cost" => wc_price(($selectedShiiping->cost)*1.24));
} else {
$AllMethod = WC()->shipping->load_shipping_methods();
$selectedMethod = $AllMethod[$shipping_method];
$flag = 0;
if ($selectedMethod->availability == "including"):
foreach ($selectedMethod->countries as $methodcountry) {
if ($country == $methodcountry) {
$flag = 1;
}
}
if ($flag == 0):
$message = $selectedMethod->method_title . " is not available in selected country.";
$returnResponse = array("code" => "error", "message" => $message);
endif;
endif;
}
return $returnResponse;
}