Direct answer
To disable Cash on Delivery for selected WooCommerce products, mark the product in the editor and remove only WooCommerce's native cod gateway from the server-generated available-payment list when that product is in the current cart. Keep COD visible when it is the shopper's only available payment method, and do not change the gateway's global settings or existing orders.
StoreFixKit's Disable Cash on Delivery for Selected Products uses that narrow model. Free adds one product checkbox. Pro adds category, tag, individual variation, exception, and explanation rules.
Start with WooCommerce's native COD settings
WooCommerce describes Cash on Delivery as an offline payment collected when the order is delivered. Its official Cash on Delivery documentation explains how to enable the gateway, change the shopper-facing title and instructions, restrict it to shipping methods, and decide whether virtual orders are accepted.
Those global settings remain the source of truth. A product-specific helper should not silently enable COD, rewrite its shipping-method list, change order status, or mark payment as collected. It should only decide whether an already available native gateway remains in the current checkout list.
Why some products need a different payment choice
The operational reason varies by store. A merchant may not want to ship a made-to-order, digital, high-return, low-margin, imported, fragile, or deposit-sensitive item without online payment. Those are business policies, not universal facts, so the plugin should never mark products automatically.
One explicit checkbox makes the decision visible in the product editor and reversible without code. The public checkout behavior then follows the current cart, not a hidden global rule.
Why CSS or browser-only hiding is unsafe
Payment availability affects whether the shopper can place an order. Hiding a radio button with CSS or removing it only in JavaScript does not change WooCommerce's authoritative server-side gateway list. A stale browser or alternate checkout surface could still submit the method.
The safer boundary is WooCommerce's available-payment-gateway filter. Classic checkout and Checkout Block ultimately receive the payment methods WooCommerce says are available for the current server-side cart. The same rule therefore applies to both without maintaining two payment engines.
Do not create a checkout with zero payment methods
A narrow plugin cannot assume another gateway is valid merely because it is installed. Availability can change with currency, country, address, shipping method, cart content, account state, or a third-party gateway's own rules.
StoreFixKit first receives WooCommerce's current available list. If native COD is the only method left, it remains visible. That fail-passive rule is more useful than presenting an empty payment section and a checkout the shopper cannot complete.
This does not mean the product policy was ignored. It means the store needs another valid payment method before COD can be safely removed. The plugin does not auto-select or configure that replacement.
Simple and variable products
For a simple product, the saved yes/no metadata belongs to that product. For a variable product, marking the parent applies the rule to its variations, which gives a beginner one obvious place to manage the family.
Pro can target an individual variation when only one option carries the restriction. It can also match categories and tags for broader policies. Because broad rules can catch an unexpected product, Pro includes an explicit product exception that wins over those category or tag matches.
The Disable COD documentation contains the exact setup and rollback workflow.
A beginner test that proves the rule
Enable native COD and at least one other valid payment method in a staging or test store. Create one marked product and one unmarked product. Test each in a fresh cart.
The unmarked cart should keep the same available gateways WooCommerce produced before the plugin rule. The marked cart should omit only native COD while retaining the other valid gateway. Then temporarily disable the other gateway and confirm StoreFixKit leaves COD visible rather than breaking checkout.
Repeat the marked-cart test in classic checkout and Checkout Block. The final server-provided payment list must agree even if the interfaces look different.
What Pro should and should not add
Category, tag, variation, and exception rules expand product selection without changing the job. A short explanation helps the shopper understand why COD is missing. These additions still operate on the available gateway list.
Country, address, user-role, cart-total, shipping-method, deposit, surcharge, and third-party cash-gateway rules are separate products with larger compatibility surfaces. WooCommerce's Marketplace also documents broader commercial COD tools, including Cash on Delivery Pro, that combine visibility, deposits, and fees. StoreFixKit deliberately avoids claiming those jobs in this focused plugin.
Safety and resource boundaries
The free plugin stores one _sfk_dcod_disabled yes/no value on products the merchant explicitly marks. Pro stores bounded lists of IDs and one explanation. Neither version creates a table, cron event, analytics record, shopper cookie, public remote request, frontend script, or frontend stylesheet.
It does not scan the whole catalog. During gateway evaluation it inspects the current bounded cart and the relevant product or parent. If a product object or cart state is unavailable or throws an error, the gateway list is returned unchanged.
License checks belong only where a Pro-owned rule can run. They should not add queries to unrelated ordinary pages. The free product checkbox and native COD behavior continue when Pro or the StoreFixKit API is unavailable.
Testing checklist
Marked simple product
COD is removed only when another gateway remains.
Unmarked product
The original WooCommerce gateway list is unchanged.
Marked variable parent
Each variation follows the explicit parent rule.
Pro category and tag
A matching product removes COD; an unrelated product does not.
Pro exception
The explicit exception keeps COD available despite a broader category or tag match.
Single available gateway
COD stays visible so checkout remains possible.
Third-party cash gateway
A gateway with an ID other than cod remains untouched.
Missing WooCommerce or malformed cart item
WordPress keeps loading and the uncertain gateway list is returned unchanged.
Update, downgrade, and uninstall
Product metadata and Pro settings survive a verified version rollback. Uninstall removes only StoreFixKit-owned settings, not products, orders, gateway configuration, or stock.
Security and support evidence
Only users allowed to edit the product should change the checkbox. Settings and rule writes need capabilities, nonces, sanitization, validation, and escaped output. The WordPress.org common plugin issues guide summarizes the sanitize, validate, and escape requirements used during directory review.
For support, capture the product and variation IDs, free checkbox state, matching Pro rules, checkout type, WooCommerce and plugin versions, and the names of available gateways with private credentials removed. Customer addresses, order contents tied to a person, API keys, and full license keys are unnecessary.
Rollback boundary
Keep the current and previous Free and Pro ZIPs plus a database backup. Deactivate both, install the previous versions, activate Free before Pro, and test marked, unmarked, and single-gateway carts. Since the plugin never rewrites WooCommerce payment settings or historical orders, rollback should not require repairing commerce data.
FAQ
Does this turn off COD for the whole store?
No. It removes native COD only for the current cart when a saved product rule matches and another usable gateway remains.
Does it work with Checkout Block?
Yes. The rule changes WooCommerce's server-side available gateway list, which both classic checkout and Checkout Block use.
Can it disable a third-party cash gateway?
No. Free targets only WooCommerce's native gateway ID cod. A third-party gateway has its own lifecycle and compatibility boundary.
What if COD is the only payment method?
It remains visible. StoreFixKit will not intentionally leave the shopper with zero payment methods.
Does it change existing orders or payment settings?
No. It does not edit orders, order status, totals, payments, the global COD configuration, products, prices, or stock.
What happens when Pro expires?
The individual product checkboxes in Free keep working. Pro category, tag, variation, exception, and explanation rules become unavailable without rewriting WooCommerce data.
Focused plugin
Use the one-job implementation.
Hide WooCommerce's native cash on delivery method when the cart contains a product you marked and another gateway remains.