Description
OCW Checkout Logic for WooCommerce lets you control per product whether each WooCommerce checkout field is required, optional or hidden. When the cart contains multiple products, the strictest rule wins automatically.
⚠ Independent third-party add-on. This plugin is developed and maintained entirely by Adviespraktijk OCW. It is not affiliated with or endorsed by Automattic, Inc. “WooCommerce” is a trademark of Automattic, Inc., used here purely to describe what this add-on integrates with.
⚠ Requires WooCommerce. The plugin filters WooCommerce checkout fields. Without WooCommerce active, the plugin has nothing to operate on — WordPress refuses to activate it via the
Requires Plugins: woocommerceheader.
Free features
- Set each WooCommerce checkout field per product to: Required, Optional, Hidden or Default
- Works for billing, shipping and order-notes fields (21 standard Woo fields covered)
- Multi-product cart: strictest rule wins (Required > Optional > Hidden > Default)
- Quick actions: set all fields with a single click
- HPOS (High-Performance Order Storage) compatible
- Cart & Checkout Blocks compatible
- Tutorial submenu with progress detection — auto-opens on activation
- Clean OCW house-style admin UI (teal / navy / pink)
PRO features
- Custom fields per product — add text, email, phone, textarea, dropdown or checkbox fields beyond Woo’s standard set. Saved as order item meta, automatically visible in admin order screen + customer emails.
- Conditional logic — “show field X when field Y equals value Z”. Lightweight JS rule engine on the checkout, no flicker.
- Per-category settings — configure checkout rules for an entire product category. Per-product overrides still win, category fills the gaps.
- Field validation patterns — built-in presets (Dutch postcode, KVK 8-digit, EU VAT, IBAN, Dutch phone) or your own regex. Runs server-side on
woocommerce_checkout_process. - Configuration templates — save the full checkout-fields configuration of a product as a named template (standard field statuses, custom fields, conditional logic, validation rules) and apply it to any other product in one click. Manage all templates from a dedicated submenu.
- Automatic updates via the OCW License Server.
- Priority support from Onne at OCW.
PRO is sold separately at onlinecursuswebsites.nl/ocw-checkout-logic-pro.
Typical use cases
- Digital products — hide all shipping fields, keep only email and name
- B2B products — make company name required, add a VAT-number field (PRO)
- Gift cards — hide address fields, make order notes required
- Event tickets — hide shipping, require phone, validate it (PRO)
Requirements
- WordPress 6.0 or higher
- WooCommerce 6.0 or higher
- PHP 8.0 or higher
Installation
- Upload the
ocw-checkout-logicfolder to/wp-content/plugins/ - Activate the plugin via the Plugins menu in WordPress
- The Tutorial page opens automatically — follow the 4 steps
- To configure a product: open the product, go to the Checkout fields tab
FAQ
-
Is this an official WooCommerce plugin?
-
No. This is an independent third-party add-on developed and maintained by Adviespraktijk OCW. It is not affiliated with or endorsed by Automattic, Inc. “WooCommerce” is a trademark of Automattic, Inc., used here purely to describe what this add-on integrates with.
-
Does this work with multiple products in the cart?
-
Yes. The plugin applies the strictest rule: Required wins over Optional, which wins over Hidden, which wins over Default.
-
Can I add custom fields beyond Woo’s standard set?
-
Yes — that is one of the PRO features. The free version only configures the 21 standard Woo checkout fields.
-
Does it work with the WooCommerce Checkout Block?
-
The free field control (required / optional / hidden per product) works on both the classic checkout and the Cart & Checkout Blocks, including server-side enforcement on the Blocks (Store API) route. The PRO features custom fields, conditional logic and validation patterns currently apply to the classic checkout shortcode only.
-
Is it HPOS-compatible?
-
Yes, fully compatible with WooCommerce High-Performance Order Storage.
-
Do extra database queries run on the checkout page?
-
No. Settings are cached in the WordPress object cache.
-
How does the PRO license work?
-
After purchase you receive a license key by email. Paste it in Checkout Fields License & PRO. All PRO features unlock immediately, automatic updates start flowing through the OCW License Server.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“OCW Checkout Logic for WooCommerce” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “OCW Checkout Logic for WooCommerce” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
2.4.0
- Blocks checkout: real server-side field handling. Hidden/optional fields are now relaxed via the
woocommerce_get_country_localefilter (drives both the Store API and the React client validation), and per-product required fields are enforced server-side on the Store API checkout route. Previously, hidden required fields on the Blocks checkout were worked around by injecting a space character into the input — which wrote junk into order address data. That hack is removed. - Hidden fields are blanked on Blocks orders (autofill could still populate a field the shopper never saw). Country and email are never blanked — they drive tax/shipping totals and the order confirmation.
- New
uninstall.php— removes all plugin options, transients, product/category/user meta and cron events on deletion. Order item meta (custom field values) is deliberately preserved as part of order history. - Generated
languages/ocw-checkout-logic.pot(96 strings) — the languages folder previously shipped without a template. - PRO validation errors now show the field label instead of the raw field key (e.g. “Postcode” instead of “billing_postcode”).
- Product-page bulk-action strings (confirm/notification) are now translatable via
wp_localize_script— they were hardcoded Dutch. - Classic checkout required-field error message translated to English source text per i18n policy.
- readme.txt: short description trimmed to the 150-char limit, stale “WooCommerce Checkout Fields License” menu path corrected to “Checkout Fields License & PRO”, honest Blocks-support scoping in the FAQ (PRO custom fields / conditional logic / validation are classic-checkout only).
- Compatibility:
Tested up to: 7.0,WC tested up to: 10.8.
2.3.0
- Renamed from “Checkout Fields for Woo” to “OCW Checkout Logic for WooCommerce” following ww.wp.xz.cn plugin-directory naming review — the new name leads with a distinctive identifier (OCW) and places the trademark “WooCommerce” at the end after “for”, as required by the trademark guidelines.
- New slug:
ocw-checkout-logic. New text domain:ocw-checkout-logic. - All internal
WCPCF_*,WC_Product_Checkout_FieldsandCFFW_*symbols renamed toOCWCL_*— eliminates the reservedwc_prefix flagged by the plugin reviewer. - Added
Requires Plugins: woocommerceheader so WordPress now checks for WooCommerce automatically before activating. - Removed the manual
load_plugin_textdomain()call — ww.wp.xz.cn auto-loads translations from the plugin slug since WP 4.6. - Independent-add-on disclaimer now visible in the plugin header description, the Plugins-list row meta, the readme.txt short description, the Description prologue, the FAQ, and the Tutorial / License & PRO / Field order page headers — to make the unaffiliated status unambiguous on every surface.
2.2.3
- ww.wp.xz.cn plugin-directory readiness:
- Added
License: GPLv2 or laterandLicense URI: https://www.gnu.org/licenses/gpl-2.0.htmlheaders to the main plugin file (scanner flaggedplugin_header_no_license). - Synced license format between plugin header and
readme.txt— both now sayGPLv2 or later(wasGPL v2 or laterin readme, missing in header). Fixeslicense_mismatch. - Bumped
Tested up tofrom 6.8 to 6.9 in both plugin header and readme. Fixesoutdated_tested_upto_header. - Added
languages/index.phpplaceholder so theDomain Path: /languagesheader points to an existing folder. Fixesplugin_header_nonexistent_domain_path.
- Added
2.2.2
- Fix: Hidden status now also works on builder-rendered checkout pages. In 2.2.1 the wrapper-hide CSS was only injected on Woo’s officially-configured Checkout page (
is_checkout()returned true). Many sites place the Woo checkout form somewhere else via a page builder — Elementor’s WooCommerce Checkout widget on the cart page is the textbook case. On those pages our CSS never loaded, so the labels stayed visible. Theis_checkout()gate is removed; the rule (.ocwcl-hidden-field { display: none !important; }) is now injected on every front-end page. Safe because the class only ever exists where our filter has already done its work. - Blocks checkout: same gate-widening —
inject_blocks_checkout_cssnow runs on both cart and checkout pages so Blocks-on-cart-page setups are covered too.
2.2.1
- Fix: Hidden status now actually hides the field row at checkout. Previously the input was hidden but its label stayed visible — labels like “Country / Region (optional)” or “Street address” still showed up because no CSS rule was hiding the wrapper. Fixed by injecting one inline CSS rule
.ocwcl-hidden-field { display: none !important; }on every checkout page. Works for the classic shortcode checkout, Elementor’s WooCommerce Checkout widget and any other widget/builder that renders fields throughwoocommerce_form_field(). - Cleaned up the now-redundant inline
display:nonestyle that was attached to each hidden input — the wrapper CSS makes it obsolete.
2.2.0
- Site-wide checkout field order (free) — new
Checkout Fields Field ordersubmenu lets you drag the 21 standard Woo checkout fields into a custom order across three lists (billing / shipping / order). Applies to the classic checkout via thewoocommerce_checkout_fieldsfilter. The per-product Checkout fields tab tables also follow this order, so admins see the same layout they’ll get at checkout. - PRO: Drag-and-drop reordering of rows in the Custom fields, Conditional logic and Field validation panels. Grab the ≡ handle on the left of any row to reorder.
- PRO: Custom fields Options input now grays out and gets a “— only used for Dropdown —” placeholder whenever Type ≠ Dropdown. The value is retained in case you switch back to Dropdown, but the input is read-only and visually muted.
2.1.3
- PRO: Fixed broken “+ Add” buttons in empty PRO panels. The “+ Add custom field”, “+ Add condition” and “+ Add validation rule” buttons silently did nothing on a product that didn’t already have at least one row — the JS tried to clone the last existing row but there wasn’t one. Each PRO panel now ships a hidden HTML template, and the add-row handlers fall back to that template when the tbody is empty.
2.1.2
- PRO Fix: License activation now uses the response from
/activatedirectly — successful activation immediately writes the valid status and you no longer rely on a separate/validateroundtrip - PRO Fix: Specific activation errors (wrong slug, expired, max activations, server unreachable) are stored in option
ocwcl_pro_last_errorand shown under the License Key field instead of a generic “Inactive” - PRO: Stores
sites_usedandsites_limitfrom the server response on the cached status object
2.1.1
- Admin menu reorganized — “Checkout Fields” is now its own top-level item in the WP admin sidebar, positioned directly below WooCommerce. Tutorial, License & PRO, and Templates (PRO) live as submenus underneath it. Old WooCommerce submenu entries removed.
- Menu icon: WP
dashicons-feedback(form-style icon). - Pre-existing styling miss fixed:
admin.cssnow loads on the Tutorial and License & PRO pages too (previously only on product edit screens), so the OCW house-style finally renders everywhere.
2.1.0
- PRO: Configuration templates — save the full checkout-fields configuration of a product as a named, reusable template (standard field statuses, custom fields, conditional logic, validation rules). Apply any saved template to another product in one click. New “Checkout Fields Templates” submenu under WooCommerce for rename/delete.
- New AJAX endpoints
ocwcl_template_save,ocwcl_template_apply,ocwcl_template_rename,ocwcl_template_delete(allmanage_woocommerce+ nonce-protected). - Stored as site option
ocwcl_pro_templates(autoload off). - License & PRO page now lists “Configuration templates” as a sixth PRO feature.
2.0.0
- Renamed to “OCW Checkout Logic for WooCommerce” (was “Woo Product Checkout Fields”) to comply with the Woo trademark naming rule. New slug:
ocw-checkout-logic. - Single-codebase architecture (free + PRO from the same source). PRO ships as its own zip with
/includes/pro/. - All admin strings translated from Dutch to English (Dutch translations available via
/languages/). - New Tutorial submenu with progress detection and reset button. Auto-opens on first activation.
- New License & PRO submenu — paste your license key, see active features at a glance.
- OCW house-style admin design (teal / navy / pink, Apple-style cards).
- PRO: custom fields per product (text/email/phone/textarea/dropdown/checkbox).
- PRO: conditional logic — “show field X when field Y equals Z”.
- PRO: per-category settings on
product_catterms. - PRO: field validation patterns (Dutch postcode, KVK, EU VAT, IBAN, Dutch phone, custom regex).
- PRO: automatic updates via the OCW License Server.
- Plugin header bumped to
Requires at least: 6.0,Tested up to: 6.8,Requires PHP: 8.0. OCWCL_*constants kept as back-compat aliases forOCWCL_*.
1.0.0
- Initial release
- Per-product checkout field control (Required / Optional / Hidden / Default)
- Billing, shipping and order-notes fields
- Quick bulk actions per product page
- HPOS and Blocks compatibility declared
