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

Ошибка при оформлении заказа на скачиваемый, виртуальный товар (Order don't have shipping methods)

Korzinkin89

Новичок
Друзья, прошу помочь с настройкой доставки виртуальных и скачиваемых товаров!

Объясняю:

1. Есть у меня физические товары на сайте интернет-магазина (они доставляются через CDEK – подключил их плагин – вроде работает) – определяет адреса пунктов выдачи заказов, показывает карту.

2. Есть у меня и цифровые товары: виртуальные и скачиваемые (например: аудиокурсы или лицензионные ключи).

Вот, как раз при оформлении заказа на цифровой товар всегда пишется ошибка "Order don't have shipping methods", хотя в характеристиках товара указано (стоят галочки), что товар скачиваемый и виртуальный и, соответственно – доставка здесь не требуется, но все равно пишется вышеуказанная ошибка. Что делать?
 
Ссылка на проблему
https://postimg.cc/WtDJrrJG

marr

Специалист
Местный
Вот, как раз при оформлении заказа на цифровой товар всегда пишется ошибка "Order don't have shipping methods", хотя в характеристиках товара указано (стоят галочки), что товар скачиваемый и виртуальный и, соответственно – доставка здесь не требуется, но все равно пишется вышеуказанная ошибка. Что делать?


Эта галка включена?
 

Korzinkin89

Новичок
Спасибо, что ответили) Да – включена. Включены оба атрибута: виртуальный и скачиваемый. Если отключить атрибут "виртуальный", то выскакивает доставка на странице оформления заказа.
 

marr

Специалист
Местный
Попробуйте такое решение. Код лучше вносить в дочернюю тему.


Код:
add_filter( 'woocommerce_checkout_fields' , 'bbloomer_simplify_checkout_virtual' );
 
function bbloomer_simplify_checkout_virtual( $fields ) {
    
   $only_virtual = true;
    
   foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
      // Check if there are non-virtual products
      if ( ! $cart_item['data']->is_virtual() ) $only_virtual = false;   
   }
    
    if( $only_virtual ) {
       unset($fields['billing']['billing_company']);
       unset($fields['billing']['billing_address_1']);
       unset($fields['billing']['billing_address_2']);
       unset($fields['billing']['billing_city']);
       unset($fields['billing']['billing_postcode']);
       unset($fields['billing']['billing_country']);
       unset($fields['billing']['billing_state']);
       unset($fields['billing']['billing_phone']);
       add_filter( 'woocommerce_enable_order_notes_field', '__return_false' );
     }
    
     return $fields;
}
 

Korzinkin89

Новичок
Попробуйте такое решение. Код лучше вносить в дочернюю тему.


Код:
add_filter( 'woocommerce_checkout_fields' , 'bbloomer_simplify_checkout_virtual' );

function bbloomer_simplify_checkout_virtual( $fields ) {
   
   $only_virtual = true;
   
   foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
      // Check if there are non-virtual products
      if ( ! $cart_item['data']->is_virtual() ) $only_virtual = false;  
   }
   
    if( $only_virtual ) {
       unset($fields['billing']['billing_company']);
       unset($fields['billing']['billing_address_1']);
       unset($fields['billing']['billing_address_2']);
       unset($fields['billing']['billing_city']);
       unset($fields['billing']['billing_postcode']);
       unset($fields['billing']['billing_country']);
       unset($fields['billing']['billing_state']);
       unset($fields['billing']['billing_phone']);
       add_filter( 'woocommerce_enable_order_notes_field', '__return_false' );
     }
   
     return $fields;
}
Спасибо огромное, попробую, но подскажите пожалуйста: а для данной манипуляции плагин ProFunctions не подойдет? Скрин прикладываю...
 

Вложения

  • Скриншот 25-01-2024 17.17.21.jpg
    Скриншот 25-01-2024 17.17.21.jpg
    16.4 KB · Просмотры: 6

Korzinkin89

Новичок
Попробуйте такое решение. Код лучше вносить в дочернюю тему.


Код:
add_filter( 'woocommerce_checkout_fields' , 'bbloomer_simplify_checkout_virtual' );

function bbloomer_simplify_checkout_virtual( $fields ) {
   
   $only_virtual = true;
   
   foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
      // Check if there are non-virtual products
      if ( ! $cart_item['data']->is_virtual() ) $only_virtual = false;  
   }
   
    if( $only_virtual ) {
       unset($fields['billing']['billing_company']);
       unset($fields['billing']['billing_address_1']);
       unset($fields['billing']['billing_address_2']);
       unset($fields['billing']['billing_city']);
       unset($fields['billing']['billing_postcode']);
       unset($fields['billing']['billing_country']);
       unset($fields['billing']['billing_state']);
       unset($fields['billing']['billing_phone']);
       add_filter( 'woocommerce_enable_order_notes_field', '__return_false' );
     }
   
     return $fields;
}
Попробовал разместить данный код через плагин ProFunctions – при оформлении заказа виртуального, скачиваемого товара та же ошибка появляется: "Order don't have shipping methods"
 
Сверху Снизу