In short
Shopify treats manual payment methods like cash on delivery as “on” or “off” for the whole store, no matter which shipping method a customer picks. There is no built-in condition for “only with local pickup” or “not with carrier shipping” — and even Shopify’s own Checkout Blocks don’t list “shipping method” as a condition for payment methods. The fix is a payment customization: a rule that checks the shipping method the customer selected and hides the payment method for every other case. These rules run as a Shopify Function directly at checkout — on any plan, but only through an app from the App Store.
The problem, in merchants’ words
The Shopify Community has asked for this in every variation for years: “How can I limit payment methods based on shipping selection?”, “Filter Cash on Delivery (COD) payment based on shipping method?”, “Hiding payment method based on selected shipping method”. The reason is always the same: cash on delivery only works when someone is actually there to collect the money — a local pickup or a driver, not a third-party carrier shipping a parcel across the country.
The native way in Shopify
Create the manual payment method: Settings › Payments › “Manual payment methods”. Set up “Cash on delivery” or similar with a name and payment instructions, then activate it.
Set up local pickup as a shipping option: Settings › Shipping and delivery › enable “Local pickup” and add a pickup location.
Both settings work independently of each other. Once the payment method is active, every customer sees it — regardless of whether they choose shipping or pickup. There is no field in the admin that ties a payment method to a specific shipping method.
Where Shopify stops
- Manual payment methods have no shipping-method condition. Active means visible to everyone, whichever shipping or pickup option they picked.
- Shopify’s own Checkout Blocks only cover part of it. Payment methods can be hidden conditionally there, but only by minimum spend, shipping destination (country), customer tag or collection. “Shipping method” isn’t one of the listed conditions, and the feature is limited to the Shopify Plus plan regardless.
- Delivery Customization is the wrong tool for this. Shopify offers a separate function type, the Delivery Customization, that can hide, sort or rename shipping and pickup options themselves — but it has no effect on payment methods. The Community regularly mixes the two up when searching for a fix.
- The common workaround is a note in the payment description (“Pickup only — please bring exact change”) or a manually created draft order with the payment added by hand. Neither stops a shipping customer from picking cash on delivery in the regular checkout.
How a payment rule solves it
The rule checks the shipping method the customer selected and hides the payment method for every other case:
| Goal | Rule |
|---|---|
| Cash on delivery only for pickup | shipping method is not “Local pickup” → hide cash on delivery |
| No COD once a carrier is shipping | shipping method is “Local pickup” → hide cash on delivery for everything else |
| No bank transfer for pickup orders | shipping method is “Local pickup” → hide bank transfer |
What the customer sees: pick local pickup and cash on delivery shows up as an option; pick carrier shipping and it’s gone — only bank transfer, PayPal or card remain.
Technically the rule uses Shopify’s Payment Customization Function: at checkout Shopify hands the function the cart’s delivery data, including the selected shipping method (cart.deliveryGroups/selectedDeliveryOption), and the function answers with “hide”. That runs on Shopify’s own infrastructure, without a detour via third-party servers and without touching the theme. Uninstall the app and checkout goes back to default.
Things to watch
- The shipping method’s name has to match. Rules reference the name or handle of the shipping option — if you rename the pickup option in the admin, check that the rule still applies.
- Payment customization and delivery customization are two separate building blocks. A payment-method rule won’t hide shipping options and vice versa — you may need one rule for each.
- Limit: Shopify allows up to 25 active payment customizations per store across all apps. This rule needs one.
- Combinable: The same mechanism works for any manual payment method — cash on delivery, bank transfer, invoice — and can be combined with other conditions like country or cart total.
Frequently asked questions
Can I limit payment methods based on shipping selection?
Not with built-in settings. A manual payment method like cash on delivery is either active for every order or for none — Shopify does not offer a condition for the selected shipping method. A payment customization (an app from the App Store) hides the method for every shipping method except the one you choose, for example local pickup.
Can I filter Cash on Delivery (COD) based on the shipping method?
Yes, but only through an app. Merchants have asked for exactly this for years: COD makes sense for local pickup or a driver who collects cash, but not once a third-party carrier is handling the shipment — the carrier has no way to collect payment. A payment rule hides COD whenever the selected shipping method isn't local pickup.
Does hiding a delivery method also hide the payment method?
No. Hiding, renaming or reordering shipping and pickup options themselves is a separate function — the Delivery Customization Function. It has no effect on payment methods. To hide a payment method depending on the chosen shipping method, you need the other function type: the Payment Customization.
Do I need Shopify Plus for a rule based on shipping method?
No. Public apps built on Shopify Functions run on every plan. Shopify's own Checkout Blocks can hide payment methods conditionally, but only by minimum spend, shipping destination (country), customer tag or collection — "shipping method" isn't one of the listed conditions, and the feature is Plus-only regardless.
What happens with local pickup and COD if I don't set up a rule?
Shopify shows the payment method to every customer regardless of the shipping method they picked. Some merchants work around this with a note in the payment description ("Pickup only — please bring exact change") — that doesn't stop a shipping customer from selecting it, it only warns them.
Is a workaround like a manual draft order still needed once a rule is set up?
No. Without a rule, some merchants create pickup orders as drafts and add the cash payment by hand afterwards. With a payment rule that workaround becomes unnecessary — cash on delivery only shows up for pickup orders automatically, and the order goes through checkout normally.
Sources
- Shopify Help Center: Checkout Blocks — payment methods (conditions, Plus only)
- Shopify Help Center: Checkout Blocks — delivery methods (conditions for shipping method, Plus only)
- Shopify Help Center: Manual payment methods
- shopify.dev: Payment Customization Function API (cart.deliveryGroups/selectedDeliveryOption)
- shopify.dev: Delivery Customization Function API (separate function type for shipping options)
- Shopify Community: "How can I limit payment methods based on shipping selection?"
- Shopify Community: "Filter Cash on Delivery (COD) payment based on shipping method?"
- Shopify Community: "Hiding payment method based on selected shipping method"