To skip checkout for free packages/products use PHP snippet below.

How to add PHP snippets?

// Skip checkout for free products and automatically complete the order
add_action('template_redirect', 'skip_checkout_for_free_products');

function skip_checkout_for_free_products() {
    // Only proceed if we're on the cart or checkout page, and not the order-received page
    if ((is_cart() || is_checkout()) && !is_wc_endpoint_url('order-received')) {
        // Get the cart total
        $cart_total = WC()->cart->get_total('edit');

        // Check if the cart contains only free products (total is 0)
        if ($cart_total == 0) {
            // Create an order with free products
            $order = wc_create_order();

            // Add the products in the cart to the order
            foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
                $order->add_product($cart_item['data'], $cart_item['quantity']);
            }

            // Calculate the order totals
            $order->calculate_totals();

            // Mark the order as completed
            $order->set_status('completed');
            $order->save();

            // Empty the cart
            WC()->cart->empty_cart();

            // Redirect to the order received page (thank you page)
            wp_redirect($order->get_checkout_order_received_url());
            exit;
        }
    }
}

// Automatically mark orders containing only free products as "completed"
add_action('woocommerce_checkout_order_processed', 'auto_complete_order_for_free_products', 10, 1);

function auto_complete_order_for_free_products($order_id) {
    // Get the order object
    $order = wc_get_order($order_id);

    // Flag to check if all items are free
    $all_items_free = true;

    // Loop through each item in the order
    foreach ($order->get_items() as $item) {
        if ($item->get_total() > 0) {
            // If any item has a price greater than 0, set the flag to false
            $all_items_free = false;
            break;
        }
    }

    // If all products are free, mark the order as completed
    if ($all_items_free) {
        $order->update_status('completed');
    }
}