Рассчитать доставку за 1 товар вместо всей корзины - PullRequest
0 голосов
/ 23 мая 2018

Я установил плагин для расчета стоимости доставки на странице одного продукта.Плагин добавляет продукт в корзину, рассчитывает стоимость доставки (вся корзина + этот продукт), а затем удаляет его.

Я хочу рассчитать стоимость доставки только для этого продукта (должно быть что-то вроде копирования правильной корзины, пустая корзина, добавить этот продукт в корзину, рассчитать доставку, очистить корзину, откатить корзину из копии?) У кого-нибудь есть предложения, как изменить приведенный выше код для расчета только для текущего продукта?

/* 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...