Как убрать способы доставки у виртуального товара в WooCommerce (WordPress)?

Для того чтобы убрать способы доставки у виртуального товара в WooCommerce вам потребуется внести изменения в код.

Первым шагом открыть файл functions.php вашей темы. Для этого перейдите в административную панель вашего сайта на WordPress, затем перейдите в раздел "Внешний вид" -> "Редактор темы". В открывшемся окне выберите файл functions.php для редактирования.

Добавьте следующий код в файл functions.php:

function remove_shipping_for_virtual_products( $rates, $package ) {
    $is_virtual = false;

    // Check if products in the cart are virtual
    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        if ( ! $cart_item['data']->needs_shipping() ) {
            $is_virtual = true;
            break;
        }
    }

    //If virtual products are found, remove all shipping methods
    if ( $is_virtual ) {
        foreach ( $rates as $rate_key => $rate ) {
            if ( 'shipping_method' === $rate->method_id ) {
                unset( $rates[ $rate_key ] );
            }
        }
    }

    return $rates;
}
add_filter( 'woocommerce_package_rates', 'remove_shipping_for_virtual_products', 10, 2 );

Сохраните изменения.

Этот код будет проверять корзину WooCommerce на наличие виртуальных товаров. Если найдены виртуальные товары, то все способы доставки будут удалены из списка.

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

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

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