С WooCommerce мне нужно иметь бесплатную доставку на определенное количество кроме тяжелых товаров, которые входят в корзину.Бесплатная доставка в зависимости от веса и количества минимальной корзины
Кто-нибудь знает, что я должен делать?
Спасибо.
С WooCommerce мне нужно иметь бесплатную доставку на определенное количество кроме тяжелых товаров, которые входят в корзину.Бесплатная доставка в зависимости от веса и количества минимальной корзины
Кто-нибудь знает, что я должен делать?
Спасибо.
Этот пользовательский код будет держать свободный метод перевозкы груза и скроют другие методы доставки, когда количество корзинка до и если продукты не тяжелый (менее 20 кг здесь) ... Для того, чтобы не разрешайте Бесплатная доставка для заказов менее 250, вы можете установить это в woocommerce (см. в конце).
Сначала вы должны будете убедиться, что вес устанавливается в каждом тяжелом продукте (для простых или переменных продуктов (в каждой вариации). Телега субтотальная здесь Без учета налогов(и вы можете изменить его к включению . налоги легко)
Тогда вот что обычай закрученный функция woocommerce_package_rates
фильтра крючке:
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;
}
Код находится в файле functions.php вашей активной дочерней темы (или темы), а также в любом файле плагина.
Этот код проверяется, и она работает для простых и переменных продуктов ...
Вы также должны в WooCommerce настройки> Судовые, для каждой зоны отгрузки и для метода
"Free Shipping"
минимальная сумма заказа:
Вам необходимо обновить данные кэширования доставки: отключить, сохранить и включить, сохранить связанные методы доставки для текущей зоны доставки в настройках доставки woocommerce.
Большое вам спасибо за ваше время! Будет ли это давать только тяжелые предметы за 1 кг стоимости доставки за 250 в то время как «легкие» предметы, которые включены в корзину, будут бесплатной доставкой? – spy
Я не понимаю, я думаю, извините за это ... так что будет с тяжелыми предметами, которые находятся на тележке со светлыми? стоимость доставки, как я хочу? – spy
Для бесплатной доставки по определенной сумме вы можете использовать встроенную опцию 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
}
эй там и спасибо за фрагмент.Мне нужна бесплатная доставка только для легких продуктов более 250. Мне нужно иметь тяжелые продукты с ценами на доставку свыше 250 лимитов. Этот фрагмент включает в себя это? Большое спасибо – spy
бесплатная доставка за определенную минимальную сумму может быть установлена через Woocommerce. –
Тяжелые идентификаторы продукта могут быть добавлены в сниппет и может управлять доставку с slght modificatio –
Таким образом, вы хотите бесплатную доставку некоторых предметов в корзину, но не для других? –
, пожалуйста, отредактируйте ваш вопрос в соответствии с [mcve] –
эй, там есть kinda.I нужна бесплатная доставка только для легких продуктов более 250. Мне нужно иметь тяжелые продукты с ценами на доставку свыше 250 лимитов. – spy