• Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Решено Доставка тяжелых товаров

rogodessa

Новичок
Всем здравствуйте!

Ребята, возникла проблема, которую не знаю как решить.

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

Так вот, как можно реализовать, чтобы при заказе оборудования клиенту не выводились вообще никакие способы доставки? Т.е. по сути расчет общей стоимости заказа, с наличием в нем тяжелого товара, должен производиться в оффлайн режиме, путем отправки счета на email клиента.

Заранее спасибо!
 

rogodessa

Новичок
классы доставки пробовали?

Спасибо! Я изначально их и ковырял, но не мог понять как их прицепить к моему условию. Но используя классы совместно с плагином WooCommerce Advanced Free Shipping удалось добиться желаемого.

Тогда, если можно, еще один вопрос в продолжении темы. Как теперь убрать лишние способы оплаты для клиента? По сути нужно добавить еще один способ оплаты, при котором будет выведено сообщение типа "Счет мы вам отправим на Email....." и оставить только его если в заказе есть товар с нужным классом доставки. Может есть фильтр woo, в котором можно перехватить и способы оплаты и товары в корзине?
 

rogodessa

Новичок
В общем решено.

Может кому-то пригодится. Был добавлен кастомный способ доставки, а потом следующая функция, которая ищет в корзине товары с классом доставки class-delivery-equipment и если находит, то оставляет только способ оплаты с id WC_Other_Payment_Gateway, а если не находит, то удаляет этот способ из списка:

Код:
add_action( 'woocommerce_payment_gateways', 'stylefactory_hide_payments_methods' );

function stylefactory_hide_payments_methods( $load_gateways ){
   
   $cart_items = array();
   $cart_items = WC()->cart->cart_contents;
   
   $disable_paymants_methods = false;
   
    foreach ($cart_items as $cart_item) {       
        $shipping_class = $cart_item['data']->get_shipping_class();       
        if ($shipping_class === 'class-delivery-equipment') {
           $disable_paymants_methods = true;
            break;
        }           
    }
   
   if ($disable_paymants_methods !== false) $load_gateways = array('WC_Other_Payment_Gateway');
   else {
       $new_gateways = array();
       foreach( $load_gateways as $item ) {
           if($item != 'WC_Other_Payment_Gateway') $new_gateways[] = $item;
       }
       $load_gateways = $new_gateways;
   }
       
   return $load_gateways;
}
 
Сверху Снизу