Here is something that does not get talked about enough in WooCommerce store management. The payment methods sitting on your checkout page right now are probably showing up for every single customer, regardless of who they are, where they are located, or what they are buying and those default behaviors are causing more problems, as most store owners realize.
A wholesale buyer who has a pre-arranged invoice payment setup should not be wading through PayPal and credit card options that do not apply to their account. A customer in a country where a specific payment gateway is not supported should not be seeing that gateway as though it is a valid option. A guest customer should not necessarily have access to the same payment terms as a verified registered account holder.
What we have observed is that this kind of payment method clutter at checkout creates genuine confusion and in some cases causes customers to abandon the order entirely rather than figure out which option actually applies to them. Getting this right is less about fancy functionality and more about presenting the right information to the right person at the right moment.
This blog covers how to actually do that, the solutions available, and how the conditional shipping and payments WooCommerce plugin by Extendons specifically handles the more complex rule-based scenarios.
Why the Default WooCommerce Payment Setup Falls Short
Out of the box WooCommerce gives you a fairly blunt instrument for managing payment methods. You can enable or disable them globally but that is largely where the built in control ends.
There is no native way to say “show this payment gateway only to customers in these countries,” or “hide bank transfer for everyone except wholesale account holders,” or “restrict this payment method to orders above a certain value.” All of those scenarios require either custom code or a plugin that adds rule-based logic to the payment display system.
What we think is worth understanding here is that this is not really a gap in WooCommerce’s design philosophy, it is a deliberate simplicity that works fine for basic stores and becomes a limitation as the store grows more complex.
Once a store starts serving multiple customer types across multiple geographies with multiple payment arrangements, the default setup creates a checkout experience that feels generic at best and actively misleading at worst. A payment option that appears available but fails when a customer outside its supported region tries to use it is a trust-damaging experience that is entirely preventable.
The Manual Approach and Where It Breaks Down
Before getting into plugin solutions it is worth acknowledging that some store owners try to manage this manually by creating separate checkout pages or by enabling and disabling payment methods based on whatever their current primary customer base looks like.
This approach works up to a point. If a store only serves one country and one type of customer, a static global payment configuration is probably fine. But what we noticed is that the manual approach breaks down in a few specific scenarios that are more common than people expect:
- Multi-region stores where different payment methods are relevant in different countries, and the customer base is genuinely international
- Stores with both retail and wholesale customers who have fundamentally different payment arrangements and expectations at checkout
- Stores running promotions where specific payment methods should be available or restricted based on applied coupon codes or cart conditions
- Stores growing into new markets where payment preferences vary significantly and the checkout needs to adapt without requiring manual reconfiguration every time a new region becomes relevant
In all of these scenarios what is needed is a rule-based system that evaluates who the customer is and what their order looks like and then shows or hides payment methods accordingly in real time without any manual intervention.
Built-In WooCommerce Options Worth Knowing About First
There are a few things WooCommerce does natively that are worth understanding before adding plugins because using what is already there before layering in additional tools is always the cleaner approach.
Payment Gateway Country Restrictions
Some payment gateways have their own built-in country restriction settings accessible through their individual plugin settings pages. PayPal for example can be configured to only appear for customers in supported countries through its own settings. If the gateway you are working with has this capability it is worth using it natively rather than replicating it through a separate rule.
Shipping Method Linked Payment Restrictions
WooCommerce does allow certain payment gateways to be tied to specific shipping methods through the gateway’s settings, meaning a payment option like cash on delivery can be restricted to appear only when a specific local delivery shipping method is selected. This is limited but useful for the specific scenario it covers.
What we found is that these native options handle a narrow set of scenarios reasonably well but fall significantly short once you need user-role based logic, multi-condition rules, or location-based restrictions at the state or postcode level rather than just the country level.
Using the Conditional Shipping and Payments WooCommerce Plugin for Rule-Based Control
The Conditional Shipping and Payment Methods plugin by Extendons is where the real flexibility comes in and what we think makes it worth looking at specifically is the combination of conditions it supports and how those conditions can be combined using AND and OR logic to handle scenarios that are genuinely complex without the rules becoming difficult to manage.
The plugin works through a rule-based system where each rule is independent, evaluates its own conditions, and triggers an action when those conditions are met. The action can be hiding specific payment methods, showing only specific payment methods, or preventing order submission entirely when certain conditions are present.
Getting it installed is straightforward:
- Log into your WooCommerce account and go to My Subscriptions
- Find the plugin and click Add to Store
- Follow the on-screen instructions for automatic installation
- Activate from the Plugins section in WordPress admin
- Before building rules confirm that all payment methods you want to manage are already enabled under WooCommerce > Settings > Payments
- Plugin configuration lives under WooCommerce > Settings > Payment and Shipping Settings
Setting Up User Role-Based Payment Rules
This is probably the most commonly needed scenario for stores serving multiple customer types and it is also one of the cleaner use cases for conditional shipping and payments WooCommerce rules because the logic is straightforward even if the outcome is significant.
Go to Payment Gateways in the plugin settings and click Add New Rule.
Scenario: Showing Bank Transfer Only for Wholesale Customers
This is a situation we see fairly often in stores that serve both retail and trade customers from the same WooCommerce installation. Bank transfer or invoice payment is appropriate for wholesale buyers who have a payment arrangement in place but should not appear for regular retail customers who have no such arrangement.
Configure the rule as follows:
- Rule Name: Something descriptive like “Bank Transfer Wholesale Only” so you can identify it immediately in a list of multiple rules
- Target Gateways: Select the bank transfer payment method
- Action Type: Show Only These Gateways
- Conditions: Select User Role, set the comparison to Equals, and choose your wholesale or trade customer role
What this does is make bank transfer visible exclusively to customers logged in with the wholesale role while retail customers and guests never see it at the checkout page. No manual toggling required, no separate checkout pages needed, the rule just runs silently every time a customer reaches checkout.
Scenario: Hiding Premium Payment Terms for Guest Customers
Guest checkouts carry different risk profiles from registered account holders and some payment methods that work well for verified customers are less appropriate for completely anonymous transactions. A buy now pay later option for example, is something you might want to restrict to logged in registered customers rather than making it available to anyone who reaches checkout without an account.
- Rule Name: “Hide BNPL for Guests”
- Target Gateways: Select the buy now pay later payment method
- Action Type: Hide Only These Gateways
- Conditions: User Role, Equals, Guest
Simple rule, significant outcome. Guest customers do not see the option and registered account holders do.
Scenario: Restricting a Payment Method to Administrators for Manual Orders
If you process manual orders from the backend for certain customers and have a specific payment method set up for internal use only, you can restrict its visibility to administrator roles so it never appears on the public-facing checkout.
- Rule Name: “Admin-Only Payment Method”
- Target Gateways: Select the internal payment method
- Action Type: Show Only These Gateways
- Conditions: User Role, Equals, Administrator
Setting Up Location-Based Payment Rules
Geographic payment restrictions are where WooCommerce conditional shipping and payments logic really earns its place because the consequences of getting this wrong, a customer in an unsupported region attempting to complete a payment that cannot process, are genuinely bad for both the customer experience and the store’s trust signals.
The plugin supports location conditions at four levels of precision:
- Country-level for broad geographic restrictions
- State level for regional restrictions within a country
- City level for more granular local restrictions
- Postcode level for hyperlocal payment availability
Scenario: Hiding a Payment Gateway in Unsupported Countries
If you use a payment gateway that only operates in specific countries, showing it to customers outside those countries creates a checkout experience where someone selects a payment method, attempts to complete the transaction, and then receives an error that sends them back to start the process again.
- Rule Name: “Hide [Gateway Name] Outside Supported Countries”
- Target Gateways: Select the geographically restricted gateway
- Action Type: Hide Only These Gateways
- Conditions: Billing Country, Does Not Equal, then list the supported countries using OR logic between each country condition
What we think is worth noting here is that using the Does Not Equal approach means you only need to list the countries where the gateway works rather than listing every country where it does not, which is considerably more manageable for a gateway with broad but not universal coverage.
Scenario: Showing a Local Payment Method Only for Customers in a Specific Country
Some payment methods are specifically designed for local markets and make no sense outside them. iDEAL in the Netherlands, Klarna in Scandinavian markets, or specific regional bank transfer systems are all examples of payment methods that should appear for the relevant local audience and be completely invisible to everyone else.
- Rule Name: “Show [Local Gateway] for [Country] Only”
- Target Gateways: Select the local payment method
- Action Type: Show Only These Gateways
- Conditions: Billing Country, Equals, the target country
Clean and simple. Customers in that country see the relevant local payment option and customers everywhere else do not even know it exists.
Scenario: State-Level Payment Restrictions
Some payment regulations vary at the state level within a country, particularly in larger markets like the United States where financial regulations can differ meaningfully between states. If a payment method is restricted in specific states you can build a rule that hides it based on the billing state rather than the whole country.
- Rule Name: “Hide [Gateway] in Restricted States”
- Target Gateways: Select the relevant payment method
- Action Type: Hide Only These Gateways
- Conditions: Billing State, Equals, then list each restricted state using OR logic between conditions
Combining User Role and Location Conditions for Complex Scenarios
This is where the AND and OR logic within the WooCommerce conditional shipping and payments rule system becomes particularly powerful and what we noticed is that most store owners do not use this capability nearly as much as they could.
The AND relationship within a single condition group means every condition in that group must be true simultaneously for the rule to trigger. The OR relationship between multiple groups means the rule triggers if any single group’s conditions are fully met.
Scenario: Showing a Payment Method Only for Wholesale Customers in Specific Countries
Imagine a scenario where you have a specific payment arrangement available only to your wholesale customers and only in the countries where that arrangement is legally and operationally viable.
- Rule Name: “Wholesale Payment Specific Countries”
- Target Gateways: Select the relevant payment method
- Action Type: Show Only These Gateways
- Conditions: Set up a single condition group with AND logic containing both User Role Equals Wholesale AND Billing Country Equals the target countries
Both conditions need to be true at the same time. A wholesale customer in an unsupported country does not see the option. A retail customer in a supported country does not see the option. Only wholesale customers in supported countries see it.
Scenario: Hiding a Payment Method for Guest Customers OR Customers in Specific Countries
The reverse scenario, where you want a rule to trigger if either of two conditions is met uses OR logic between groups.
- Create two separate condition groups
- Group one: User Role Equals Guest
- Group two: Billing Country Equals the restricted countries
- The rule triggers and hides the gateway if either group’s conditions are met
This means guest customers anywhere in the world do not see the method and registered customers in the restricted countries also do not see it, while registered customers in supported countries see it normally.
Other Approaches Worth Knowing About
Beyond the Extendons plugin, there are a few other approaches worth being aware of, depending on the specific scenario and the technical resources available.
WooCommerce Payments Native Settings
As mentioned earlier, some individual payment gateway plugins have their own country restriction settings. Checking these before adding a separate conditional plugin is worth doing because using the gateway’s own settings is always cleaner than an external rule when it covers the scenario adequately.
Code-Based Solutions for Simple Scenarios
For stores with a single simple restriction, like hiding one payment method for guest customers only, a small code snippet added to the functions.php file or a site-specific plugin can handle it without adding another plugin to the stack. The WooCommerce hook woocommerce_available_payment_gateways allows filtering of available gateways programmatically and is well-documented in the WooCommerce developer documentation.
What we think is worth being honest about here is that the code approach works well for simple single-condition scenarios and becomes increasingly difficult to maintain as the number of rules and conditions grows. At the point where you need more than two or three distinct rules with different conditions, a dedicated plugin with a visual rule builder is considerably more manageable than a growing block of conditional PHP.
Checkout Field Plugins With Payment Logic
Some checkout field editor plugins include basic payment method visibility controls as part of their feature set. If a store is already using a checkout field plugin for other purposes it is worth checking whether it covers the payment visibility scenarios needed before adding a dedicated conditional payments plugin.
Things Worth Checking After Setting Up Payment Rules
What we have observed is that payment rules are one of those configurations where testing properly before going live is genuinely important because an incorrect rule can prevent customers from completing purchases in ways that are not immediately obvious from the admin side.
A few things worth verifying after setting up rules:
- Test as a guest customer by opening an incognito browser window and going through checkout with a cart that should trigger each rule you have created
- Test as a logged-in customer with each relevant user role by creating test accounts with the roles your rules target and verifying the correct payment methods appear or disappear for each
- Test with billing addresses in each relevant country or region to confirm that geographic rules are triggering based on the correct address fields
- Verify that the default payment method still appears correctly for customers who do not match any rule conditions, because rules that are too broad can accidentally affect customer segments they were not meant to target
- Check that the payment method still processes correctly for customers who the rule is designed to show it to, since a rule that shows a method to the right customers but where the underlying gateway has a configuration issue creates a different problem entirely
Conclusion
Showing every customer the same payment options regardless of who they are and where they are ordering from is one of those default WooCommerce behaviors that feels acceptable until you start thinking about it from the customer’s perspective and realize how much unnecessary confusion it creates.
What we think the right approach looks like is a layered one. Use native gateway settings where they cover the scenario. Use targeted code snippets for simple single-condition rules where a plugin is more than is needed. And use a dedicated rule-based plugin like the Conditional Shipping and Payment Methods plugin by Extendons for the more complex scenarios where user roles, geographic conditions, and cart logic need to combine in ways that require a proper management interface rather than hand-written conditional logic that becomes progressively harder to maintain.
Getting WooCommerce conditional shipping and payments right is ultimately about respecting the customer enough to show them a checkout that makes sense for their specific situation rather than one that was designed for the theoretical average customer and applied to everyone indiscriminately.