In older versions of WooCommerce free prices used to display as “FREE!” and products with empty prices were not publishable. Now

add_filter( 'woocommerce_get_price_html', 'hdev_price_free_zero_empty', 100, 2 );
  
function hdev_price_free_zero_empty( $price, $product ){
 
if ( '' === $product->get_price() || 0 == $product->get_price() ) {
    $price = '<span class="woocommerce-Price-amount amount">FREE</span>';
} 
 
return $price;
}