Introduction
Did you know that 93% of buyers reach the checkout page but never complete their order? One of the key reasons behind this is the overload of fields like company name, address line 1, address line 2, and more—fields that often aren’t even necessary.
WooCommerce changed the way WordPress was once used, with its e-commerce functionality. It reshapes WordPress completely for e-commerce. But one of the WooCommerce drawbacks is it doesn’t come with a pre-built checkout field editor.

You can remove WooCommerce checkout fields by using a plugin or using custom code. We will discuss both. Almost all of my clients want this functionality if they have an e-commerce website.
The easiest method is using a plugin. All you have to do is install it and set up the configuration.
Why Remove Unnecessary Checkout Fields in WooCommerce?
As told earlier, 7 out of 10 buyers reach the checkout page but don’t complete the order. Our goal is to make that 7 out of 10 into 5 out of 10 or less.
It is true that customers don’t have much time. There are lots of unnecessary things like the company name, address line 2, and order notes that can distract the buyer from purchasing the product.
By implementing the steps we will discuss, buyers can complete checkout faster, have better UX and higher conversion, and it can even have an impact on SEO.
One of my client increase conversion by 20% for Removing WooCommerce Checkout Fields.
Backup Your Site First (Important!)
What most people avoid or are not really interested in is making a backup first. It is really important to make a backup before making any changes, or it can make the website risky.
Recommended using UpdraftPlus to make a backup. I really like the UpdraftPlus simpiness and all of that. I personally use it. If you have any trouble making a backup with this plugin follow this tutorial.
- Open your WordPress admin.
- Navigate to Plugins > Add New, and search for “UpdraftPlus”.
- Click install and activate.
- Go to the plugin configuration, then click Backup Now.
In this way, if anything bad happens, you can always get the backup.
Method 1: Using a Plugin
We will use the WooCommerce checkout field editor plugin. As the name suggests, it is a plugin used for editing WooCommerce checkout fields.
Step 1: Installation
- Open your WordPress admin.
- Navigate to Plugins > Add New, and search for “Checkout Field Editor (Checkout Manager) for WooCommerce”.
- Click install then activate.

Step 2: Plugin Configuration
Navigate to WooCommerce > Checkout Form.
From there, you can manage your checkout fields:
- From there you can select a field, click Deactivate, and Delete to delete the item completely.
- You can also add new fields: select the type, name, label, placeholder, etc., to add that item.
- You can also make some fields required or non-required. Click Edit, and from there you can decide if it is required or not required.

Method 2: Remove WooCommerce Checkout Fields Using Custom Code
This method is for people who do not want to use many plugins on their website and for technical users.
Go to your functions.php and paste the code below. If you update your theme, this code will be gone if you don’t have a child theme. If you want to make a child theme, follow this tutorial.
Alternatively, you can use a code snippet plugin like WPCode, which I personally use.
Here is the code:
/**
* Customize WooCommerce checkout fields based on product types in the cart.
*/
add_filter('woocommerce_checkout_fields', 'intelligent_customize_checkout_fields');
function intelligent_customize_checkout_fields($fields) {
// Fields to remove for Non-Virtual and Non-Downloadable products
$non_virtual_remove = [
'billing' => ['billing_company', 'billing_phone'],
'shipping' => ['shipping_company'],
'order' => ['order_comments']
];
// Fields to remove for Virtual products
$virtual_remove = [
'billing' => [
'billing_company', 'billing_address_1', 'billing_address_2',
'billing_postcode', 'billing_country', 'billing_state', 'billing_city'
],
'shipping' => [
'shipping_company', 'shipping_address_1', 'shipping_address_2',
'shipping_postcode', 'shipping_country', 'shipping_state', 'shipping_city', 'shipping_first_name', 'shipping_last_name'
],
'order' => ['order_comments']
];
// Fields to remove for Downloadable products
$downloadable_remove = [
'billing' => [
'billing_company', 'billing_address_1', 'billing_address_2',
'billing_postcode', 'billing_country', 'billing_state', 'billing_city', 'billing_phone'
],
'shipping' => [
'shipping_company', 'shipping_address_1', 'shipping_address_2',
'shipping_postcode', 'shipping_country', 'shipping_state', 'shipping_city', 'shipping_first_name', 'shipping_last_name'
],
'order' => ['order_comments']
];
// Determine the product types in the cart
$has_virtual = false;
$has_downloadable = false;
$has_non_virtual = false;
foreach (WC()->cart->get_cart() as $cart_item) {
$product = $cart_item['data'];
if ($product->is_virtual()) {
$has_virtual = true;
}
if ($product->is_downloadable()) {
$has_downloadable = true;
}
if (!$product->is_virtual() && !$product->is_downloadable()) {
$has_non_virtual = true;
}
}
// Apply field removal logic based on cart contents
if ($has_non_virtual) {
foreach ($non_virtual_remove as $section => $fields_to_remove) {
foreach ($fields_to_remove as $field) {
unset($fields[$section][$field]);
}
}
}
if ($has_virtual) {
foreach ($virtual_remove as $section => $fields_to_remove) {
foreach ($fields_to_remove as $field) {
unset($fields[$section][$field]);
}
}
}
if ($has_downloadable) {
foreach ($downloadable_remove as $section => $fields_to_remove) {
foreach ($fields_to_remove as $field) {
unset($fields[$section][$field]);
}
}
}
// Disable order notes field for virtual or downloadable products
if ($has_virtual || $has_downloadable) {
add_filter('woocommerce_enable_order_notes_field', '__return_false');
}
return $fields;
}
// Remove shipping and additional fields sections for Virtual or Downloadable products
add_action('woocommerce_before_checkout_form', 'hide_unnecessary_sections', 10);
function hide_unnecessary_sections() {
$has_virtual = false;
$has_downloadable = false;
// Check cart contents for product types
foreach (WC()->cart->get_cart() as $cart_item) {
$product = $cart_item['data'];
if ($product->is_virtual()) {
$has_virtual = true;
}
if ($product->is_downloadable()) {
$has_downloadable = true;
}
}
// Conditionally hide sections
if ($has_virtual || $has_downloadable) {
?>
<style>
.woocommerce-shipping-fields,
.woocommerce-additional-fields {
display: none !important;
}
</style>
<?php
}
}
I found this code from Web Squadron – big shout-out to him!
Quick Explanation of the Code:
This code helps you remove specific checkout fields depending on the type of product in the cart:
- If it’s a physical product, it will remove fields like company name and order notes.
- If it’s a virtual product, it will remove unnecessary address and shipping fields.
- If it’s a downloadable product, it removes even more fields because you don’t need shipping or billing details.

Basically, the code checks what kind of product the user is buying and then automatically removes checkout fields that are not needed for that specific product type. This gives the buyer a cleaner and faster checkout experience.
The key point of using this code is the plugin cannot specifically edit checkout fields for digital products, downloadable products, etc. But with this code, I have set it in a way that adjusts based on product type.
How to Move or Reorder Checkout Fields (Bonus Tip)
If you want to move or reorder the WooCommerce checkout fields based on product type, then you need to place your reorder code inside the function that checks for product type. Below is an example based on our main code:
add_filter('woocommerce_checkout_fields', 'intelligent_customize_checkout_fields');
function intelligent_customize_checkout_fields($fields) {
// Reorder fields: Move phone to top, email second
$fields['billing']['billing_phone']['priority'] = 10;
$fields['billing']['billing_email']['priority'] = 20;
// Then continue with your remove logic...
// Fields to remove for Non-Virtual and Non-Downloadable products
$non_virtual_remove = [
'billing' => ['billing_company', 'billing_phone'],
'shipping' => ['shipping_company'],
'order' => ['order_comments']
];
// (Other code remains the same...)
return $fields;
}
This allows you to reorder the fields dynamically while also removing unnecessary ones based on the product type. Keep the reorder lines at the top inside the function.
Want a visual way to reorder fields?
You can also use the same plugin we used earlier — Checkout Field Editor — to drag and drop fields into the order you want. It’s quick and easy for non-technical users.
Advanced Tip: Conditional Checkout Fields
Here’s something cool that many people miss: you can show or hide checkout fields based on user roles or product types.
Example:
- Show a field only if the cart contains a physical product.
- Hide a field for logged-in users.
To do this, you can use a plugin like Checkout Field Editor Pro or use custom code for more control. This adds a smart, dynamic checkout experience and helps improve conversions even further.
FAQs
To remove unnecessary checkout fields for virtual products, you can use custom code to unset specific fields during the checkout process. This approach streamlines the checkout experience for virtual product customers.
Yes, you can conditionally display or hide checkout fields based on product types by utilizing custom PHP code. This method allows you to tailor the checkout form dynamically, enhancing user experience.
Simplifying the checkout process by removing unnecessary fields can lead to reduced cart abandonment rates, faster transactions, and improved customer satisfaction. A streamlined checkout encourages more conversions and enhances the overall user experience.
Absolutely! Plugins like the WooCommerce Checkout Field Editor provide user-friendly interfaces to add, edit, or remove checkout fields without any coding. This allows store owners to customize their checkout process effortlessly.
Before removing any checkout fields, it’s crucial to ensure that the remaining fields provide all necessary information required by your payment gateways. Testing the checkout process after modifications helps verify that payment processing functions correctly.
Conclusion
Removing WooCommerce checkout fields is one of the quickest ways to boost conversions and improve user experience. No one likes filling in unnecessary fields, especially on mobile.
If you’re just getting started, go with the plugin method — it’s super simple. But if you want full control or specific behavior based on product types, the custom code method is the way to go.
I’ve used this for many clients, and it works every time.