У меня есть базовые продукты:
Расходы
Доставка стоимость
менее 300
30 долларов
300 или более
Бесплатно
Но у меня также есть несколько крупных товаров и товаров с особыми требованиями к доставке
продукт
Класс доставки
стоимость
< tbody>
большой ящик
Грузовик с кран
1000$
большая коробка
Только грузовик
200 долларов США
Беседка (Вариант 1: только доставка) )
Доставка и Сборка
200$
Беседка (Вариант 2: Доставка и сборка)
Доставка и сборка
350$
< /table>
Ниже приведены мои способы доставки.
Способы доставки.
Стандартные тарифы.
Доставка в сборе.
Для основных продуктов все работает хорошо.
Для больших коробок все работает хорошо, как показано в стандартной доставке.
Но когда я добавляю способ доставки (доставка со сборкой), он по-прежнему отображается в качестве выбора, даже если нет продукта с этот класс находится в корзине.
Мне просто нужно, чтобы он появлялся только тогда, когда беседка находится в корзине
Код: Выделить всё
add_filter( 'woocommerce_package_rates', 'hide_shipping_when_class_is_in_cart', 100, 2 );
Код: Выделить всё
$free_shipping_method = 'free_shipping:13';
$shipping_classes = array('truck-crane','large-furniture','furniture-assembly');
$class_exists = false;
$cart_classes = array();
$shipping_methods = $shipping_zone->get_shipping_methods();
foreach( $package['contents'] as $cart_item )
$cart_item_class = $cart_item['data']->get_shipping_class();
if( in_array($cart_item_class , $shipping_classes ) ) {//Check if any shipping class exist
array_push($cart_classes,$cart_item_class); //push cart classes to array
$class_exists = true;
//break;
}
foreach($shipping_methods as $method){
$method_classes = $method->get_shipping_classes();
//Here i want to unset shipping methods which has no avaiable class in cart items
}
if( $class_exists )
unset( $rates[$free_shipping_method] );
return $rates;
Подробнее здесь: https://stackoverflow.com/questions/736 ... ules-issue
Мобильная версия