This snippet removes all but the Name and Email Address fields.
<?php
add_filter( 'woocommerce_checkout_fields', function( $fields ) {
if ( WC()->cart && ! WC()->cart->needs_payment() ) {
$free_fields = [];
foreach ( $fields['billing'] as $key => $value ) {
if ( in_array( $key, [ 'billing_email', 'billing_first_name' ] ) ) {
$free_fields['billing'][$key] = $value;
}
}
return $free_fields;
}
return $fields;
}, 99999999 );