Бесплатная доставка в зависимости от веса и минимальной суммы

С WooCommerce мне нужно иметь бесплатную доставку на определенное количество 250, за исключением тяжелых продуктов, которые включены в корзину.

Кто-нибудь знает, что я должен делать?

Благодарю.

    Этот пользовательский код будет поддерживать свободный способ доставки и будет скрывать другие способы доставки, если сумма корзины составляет до 250, и если продукты не являются тяжелыми (здесь меньше 20 кг) … Чтобы не допускать бесплатную доставку для заказов менее 250, вы можете установить это в woocommerce (см. в конце).

    Прежде всего, вам нужно будет убедиться, что вес установлен в каждом тяжелом продукте (для простых или переменных продуктов (в каждом варианте). Процентная доля корзины здесь: Исключая налоги (и вы можете легко изменить их, включая налоги) .

    введите описание изображения здесь

    Тогда вот эта пользовательская функция с woocommerce_package_rates в woocommerce_package_rates hook hook:

     add_filter( 'woocommerce_package_rates', 'conditionally_hide_other_shipping_based_on_items_weight', 100, 1 ); function conditionally_hide_other_shipping_based_on_items_weight( $rates ) { // Set HERE your targeted weight (here is 20 kg) <== <== <== <== <== $target_product_weight = 20; // Set HERE your targeted cart amount (here is 250) <== <== <== <== <== $target_cart_amount = 250; // For cart subtotal amount EXCLUDING TAXES WC()->cart->subtotal_ex_tax >= $target_cart_amount ? $passed = true : $passed = false ; // For cart subtotal amount INCLUDING TAXES (replace by this): // WC()->cart->subtotal >= $target_cart_amount ? $passed = true : $passed = false ; // Iterating trough cart items to get the weight for each item foreach(WC()->cart->get_cart() as $cart_item){ if( $cart_item['variation_id'] > 0) $item_id = $cart_item['variation_id']; else $item_id = $cart_item['product_id']; // Getting the product weight $product_weight = get_post_meta( $item_id , '_weight', true); if( !empty($product_weight) && $product_weight >= $target_cart_amount ){ $light_products_only = false; break; } else $light_products_only = true; } // If 'free_shipping' method is available and if products are not heavy // and cart amout up to the target limit, we hide other methods $free = array(); foreach ( $rates as $rate_id => $rate ) { if ( 'free_shipping' === $rate->method_id && $passed && $light_products_only ) { $free[ $rate_id ] = $rate; break; } } return ! empty( $free ) ? $free : $rates; } 

    Код идет в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.

    Этот код проверен и работает для простых и переменных продуктов …

    Вы также должны будете в настройках WooCommerce> Отгрузка, для каждой зоны доставки и для метода "Free Shipping" ваша минимальная сумма заказа:

    введите описание изображения здесь

    Для бесплатной доставки по определенной сумме вы можете использовать встроенную опцию WooCommerce.

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

      add_filter('woocommerce_package_rates', 'hide_shipping_method_if_particular_product_available_in_cart', 10, 2); function hide_shipping_method_if_particular_product_available_in_cart($available_shipping_methods) { global $woocommerce; // products_array should be filled with all the products ids // for which shipping method (stamps) to be restricted. $products_array = array( 101, 102, 103, 104 ); // You can find the shipping service codes by doing inspect element using // developer tools of chrome. Code for each shipping service can be obtained by // checking 'value' of shipping option. $shipping_services_to_hide = array( 'free_shipping', ); // Get all products from the cart. $products = $woocommerce->cart->get_cart(); // Crawl through each items in the cart. foreach($products as $key => $item) { // If any product id from the array is present in the cart, // unset all shipping method services part of shipping_services_to_hide array. if (in_array($item['product_id'], $products_array)) { foreach($shipping_services_to_hide as & $value) { unset($available_shipping_methods[$value]); } break; } } // return updated available_shipping_methods; return } не  add_filter('woocommerce_package_rates', 'hide_shipping_method_if_particular_product_available_in_cart', 10, 2); function hide_shipping_method_if_particular_product_available_in_cart($available_shipping_methods) { global $woocommerce; // products_array should be filled with all the products ids // for which shipping method (stamps) to be restricted. $products_array = array( 101, 102, 103, 104 ); // You can find the shipping service codes by doing inspect element using // developer tools of chrome. Code for each shipping service can be obtained by // checking 'value' of shipping option. $shipping_services_to_hide = array( 'free_shipping', ); // Get all products from the cart. $products = $woocommerce->cart->get_cart(); // Crawl through each items in the cart. foreach($products as $key => $item) { // If any product id from the array is present in the cart, // unset all shipping method services part of shipping_services_to_hide array. if (in_array($item['product_id'], $products_array)) { foreach($shipping_services_to_hide as & $value) { unset($available_shipping_methods[$value]); } break; } } // return updated available_shipping_methods; return }