WooCommerce Checkout Simplifier
A lightweight and efficient WordPress plugin that removes unnecessary checkout fields from your WooCommerce store
by Nikolay Djemerenov · github.com/nikdjem/woocommerce_field_remover_plugin · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/nikdjem/woocommerce_field_remover_plugin/archive/refs/heads/main.zipA PHP-only WooCommerce plugin that configures native checkout field visibility for Company, Address Line 2, and Phone using WooCommerce's supported global field options.
Current version: 2.0.0
Repository: github.com/nikdjem/woocommerce_field_remover_plugin
Overview
WooCommerce Checkout Simplifier applies sensible first-run defaults for three optional checkout fields and then gets out of the way. It does not manipulate checkout markup, does not use JavaScript or React, and does not register runtime checkout filters.
On activation, the plugin writes WooCommerce's native visibility options only when they are not already stored. Existing merchant settings are preserved. Ongoing configuration remains under native WooCommerce controls.
Primary target: modern WooCommerce Block Checkout.
Supported Fields
| Field | WooCommerce option | Default |
|---|---|---|
| Company | woocommerce_checkout_company_field |
hidden |
| Address Line 2 | woocommerce_checkout_address_2_field |
optional |
| Phone | woocommerce_checkout_phone_field |
optional |
Allowed values for each option:
requiredoptionalhidden
Native Option Model
The plugin writes directly to WooCommerce option keys. It does not introduce duplicate custom storage.
| Option | Purpose |
|---|---|
woocommerce_checkout_company_field |
Company field visibility |
woocommerce_checkout_address_2_field |
Address Line 2 visibility |
woocommerce_checkout_phone_field |
Phone field visibility |
Behavior:
- Activation only — defaults are applied when an option is not already stored.
- Preserve existing settings — merchant or WooCommerce migration values are never overwritten on activation.
- No runtime enforcement — the plugin does not force values on every request.
Merchant Control
The plugin does not provide a custom settings page.
Merchants configure these fields through native WooCommerce settings and Checkout Block field controls. WooCommerce remains the source of truth after activation.
Supported / Protected Fields
Version 2.0.0 intentionally does not configure:
- Country
- Address Line 1
- City
- State
- Postcode
- First Name
- Last Name
This avoids interfering with core checkout address and order data. Unlike the legacy Field Remover (1.x), v2 does not remove State or Shipping State.
Requirements
- WordPress 6.0 or higher
- WooCommerce 9.6 or higher (native field visibility model)
- PHP 7.4 or higher
Installation
Manual Installation
- Download or clone the plugin repository.
- Place the
woocommerce_field_remover_pluginfolder in/wp-content/plugins/. - Activate WooCommerce Checkout Simplifier from the Plugins screen.
- Ensure WooCommerce is installed and active.
On first activation, default visibility values are written only for options that are not already stored.
Compatibility
| Surface | Notes |
|---|---|
| Block Checkout | Primary target; functionally verified locally |
| Shortcode checkout | Shares the same native global options (WooCommerce 11.0.1 source architecture) |
| Store API | Shares the same native global options |
| My Account | Shares the same native global options |
Architecture is shared across these WooCommerce surfaces; this project was functionally verified against Block Checkout.
Verified locally with WordPress 7.1 and WooCommerce 11.0.1.
Do not assume universal compatibility with every WooCommerce version, theme, or checkout configuration.
Testing
Local functional verification (Phase 09.6E.2D):
| Check | Result |
|---|---|
| Plugin activation | Pass |
| Existing option preservation on activation | Pass |
| Block Checkout rendering | Pass |
| Company hidden when configured hidden | Pass |
| Address Line 2 optional when configured optional | Pass |
| Phone required when configured required | Pass |
| Protected fields untouched (State remains present) | Pass |
| No runtime force override by plugin | Pass |
| No PHP errors observed | Pass |
Environment: vibe-shoplocal.local — WordPress 7.1, WooCommerce 11.0.1, Block Checkout, theme: vibe-store.
Known test limitation: Merchant override persistence could not be isolated under a clean standard theme on the available Local setup. The active vibe-store theme forces woocommerce_checkout_company_field = hidden and woocommerce_checkout_phone_field = required on every init. That behavior is external to this plugin and is not a plugin failure. Plugin source review confirms update_option() is used only inside the activation flow.
Evolution: From Field Remover to Checkout Simplifier
1. Legacy implementation
The original plugin (1.x — WooCommerce Field Remover) used the woocommerce_checkout_fields filter to remove:
billing_statebilling_phoneshipping_state
2. Initialization issue
During maintenance/refactoring, the initialization flow was changed so the constructor no longer called init(), but the bootstrap function did not invoke init() either.
This caused the checkout filter to remain unregistered. The issue was identified through source and hook analysis and corrected in the 1.0.x line.
3. Block Checkout compatibility discovery
The corrected legacy implementation was tested against the modern WooCommerce Block Checkout. The legacy woocommerce_checkout_fields approach did not remove the visible Block Checkout fields for the targeted use case.
This led to a compatibility review.
4. Modern WooCommerce architecture
WooCommerce provides native global visibility options for Company, Address Line 2, and Phone (required, optional, hidden). These options are consumed by Block Checkout, shortcode checkout, Store API, and related surfaces in WooCommerce 9.6+.
The plugin was redesigned to use those supported options instead of legacy checkout field manipulation.
5. Version 2.0.0
Version 2.0.0 is a product and architecture redesign, not a minor bug fix. The plugin was renamed internally to WooCommerce Checkout Simplifier, scope was narrowed to the three supported fields above, and legacy state/phone/shipping-state removal was removed.
Technical Details
- Architecture: Minimal procedural bootstrap; activation hook only for defaults.
- Security:
ABSPATHguard, WooCommerce dependency check on activation, capability-checked admin notice when WooCommerce is missing. - Internationalization: Text domain
wc-checkout-simplifier. - No runtime checkout hooks in v2.0.0.
Contributing
Contributions are welcome. For significant changes, open an issue first.
- Fork the repository
- Create a feature branch
- Commit your changes
- Push and open a Pull Request
License
GPL v2 or later — see LICENSE or https://www.gnu.org/licenses/gpl-2.0.html.
Author
Nikolay Djemerenov
- Website: nikweb.eu
- GitHub: github.com/nikdjem/woocommerce_field_remover_plugin
Support
For issues or questions, open an issue on GitHub with environment details (WordPress version, WooCommerce version, checkout type, active theme).