add_filter('woocommerce_package_rates', 'hide_shipping_based_on_cart_content', 10, 2);
function hide_shipping_based_on_cart_content($rates, $package) {
    $cart_contains_digital_products = false;

    foreach ($package['contents'] as $item) {
        $product = $item['data'];
        if ($product->is_downloadable()) {
            $cart_contains_digital_products = true;
            break;
        }
    }

    if ($cart_contains_digital_products) {
        foreach ($rates as $rate_id => $rate) {
            if ('flat_rate' === $rate->method_id) {
                unset($rates[$rate_id]); // Flat Rate Versand entfernen
            }
        }
    }

    return $rates;
}