How to add a cash-on-delivery form to WooCommerce

The default WooCommerce checkout asks a cash-on-delivery buyer for a billing address, an account and a payment method, none of which apply. Here is what to replace it with.

Why the normal checkout loses these orders

Add to cart, view cart, proceed to checkout, fill in nine fields, choose a payment method that is not really a payment method. That is four page loads before an order exists, on a phone, often on a slow connection. Every one of them is a place to leave. A shopper paying at the door has already decided; the checkout's job is to get out of the way.

What the form should actually ask

Four things: name, phone, city, address. The phone is the one that matters — in a cash-on-delivery market it is how the order gets confirmed and how the courier finds the door. Email is optional and usually worth switching off. Anything else you think you need, ask yourself whether you would rather have the answer or the order.

Put it on the product page, not on its own page

The moment somebody wants to buy is while they are looking at the thing. A popup that opens on the product page, or a form embedded under the price, keeps that moment intact. A shortcode covers the cases a theme makes awkward, and the add-to-cart button can be hidden so there is only one thing to press.

Recalculate every price on the server

Whatever the browser sends can be edited before it is sent. The offer, the delivery fee and the total all have to be worked out again on your own server from your settings and the product before the order is written, and the order total pinned to that figure. Otherwise the amount your courier collects is whatever the buyer decided it should be.

Then make the order bigger

Once one form is taking orders, the cheapest growth left is in that same form: a quantity offer, an add-on as a tick box, and one post-purchase offer that appends to the order just placed rather than starting a second one with a second delivery fee.

Questions

Do I still need WooCommerce's Cash on Delivery gateway?

Yes, enabled under WooCommerce → Settings → Payments, so the orders carry the right payment title. The form does not replace the gateway; it replaces the checkout page.

Will orders still appear normally in WooCommerce?

Yes. They are ordinary WooCommerce orders with ordinary line items, so every report, export and shipping plugin you already use keeps working.

Can I use it on only some products?

Yes — an include or exclude list decides which products get the form, and the rest keep the standard checkout.

The plugin that does all of this

The form itself is free on WordPress.org. The premium add-on is what adds the offers, the delivery table, the fraud rules and the dashboard.