In my last post, I talked about how you can disable payment gateways in WooCommerce based on different user roles. Sometimes, there are instances where you may need to do this based on the country of the customer. This can be for different reasons such as the payment gateway not being widely used in that country, or that you want to encourage your customers to use a certain payment gateway to make payments and so you would want to selectively enable that payment gateway. In any case, when it comes to an ecommerce store which serves on a global scale, this is a useful feature. Read on to find out how you can disable payment gateways for some countries in WooCommerce.
As with most things, you can do this using code snippets or plugins.
Using a code snippet to disable payment gateways for some countries
To start with, let’s consider an instance where you want to disable PayPal for India. Paste the following code in the functions.php file of your child theme:
add_filter( 'woocommerce_available_payment_gateways', 'ts_disable_payment_gateway_by_country' ); function ts_disable_payment_gateway_by_country( $available_payment_gateways ) { if ( is_admin() ) return $available_payment_gateways; if ( isset( $available_payment_gateways['paypal'] ) && WC()->customer->get_billing_country() == 'IN' ) { unset( $available_payment_gateways['paypal'] ); } return $available_payment_gateways; }
Here, we have added a function to the hook woocommerce_available_payment_gateways, which checks the country code of the country we are writing the condition for, and disables PayPal for that country (India in our case):
Every country has a different code just like we have used “IN” for India here. You can find the list of country codes at the end of this post.
The keywords/slugs for the default available payment gateways are:
PayPal: paypal
Direct Bank Transfer: bacs
Cash on Delivery: cod
Cheque: cheque
Let’s consider another instance where we want to have only the PayPal option enabled for customers in the US, with this option being disabled for those in India. In this case, we will adjust a few more lines to our code snippet above so that it disables the other payment gateways for customers in the US:
add_filter( 'woocommerce_available_payment_gateways', 'ts_disable_payment_gateway_by_country' ); function ts_disable_payment_gateway_by_country( $available_payment_gateways ) { if ( is_admin() ) return $available_payment_gateways; if ( isset( $available_payment_gateways['paypal'] ) && WC()->customer->get_billing_country() == 'IN' ) { unset( $available_payment_gateways['paypal'] ); } if ( WC()->customer->get_billing_country() == 'US' ) { if (isset($available_payment_gateways['bacs'])) { unset($available_payment_gateways['bacs']); } if (isset($available_payment_gateways['cheque'])) { unset($available_payment_gateways['cheque']); } if (isset($available_payment_gateways['cod'])) { unset($available_payment_gateways['cod']); } } return $available_payment_gateways; }
In this way, you can disable payment gateways based on the country of the customer.
Using a plugin to disable payment gateways for some countries
There are also plugins available to disable payment gateways as per the country of the customer. One such plugin is the Country Based Payments plugin. It is a free plugin that you can use to decide which payment gateway should be available in which country. While the plugin interface is friendly and self-explanatory, if you want to exclude just one country from a payment gateway, then the way around it is to select all countries against that payment gateway, and then individually unselect the countries which you want to disable that payment gateway for.
Also, using the Conditional Payment Methods for WooCommerce plugin, you can hide/show any payment gateways (including custom gateways) based on countries – customers’ billing/shipping location, or product taxonomy or order total. For example, show PayPal and Stripe in US, Canada and European countries.
In this manner, you can use code snippets as well as plugins to disable payment gateways based on the country.
List of Country Codes:
Code | Location/Country |
A1 |
Anonymous Proxy
|
A2 | Satellite Provider |
O1 | Other Country |
AD | Andorra |
AE |
United Arab Emirates
|
AF | Afghanistan |
AG |
Antigua and Barbuda
|
AI | Anguilla |
AL | Albania |
AM | Armenia |
AO | Angola |
AP |
Asia/Pacific Region
|
AQ | Antarctica |
AR | Argentina |
AS |
American Samoa
|
AT | Austria |
AU | Australia |
AW | Aruba |
AX | Aland Islands |
AZ | Azerbaijan |
BA |
Bosnia and Herzegovina
|
BB | Barbados |
BD | Bangladesh |
BE | Belgium |
BF | Burkina Faso |
BG | Bulgaria |
BH | Bahrain |
BI | Burundi |
BJ | Benin |
BL |
Saint Barthelemey
|
BM | Bermuda |
BN |
Brunei Darussalam
|
BO | Bolivia |
BQ |
Bonaire, Saint Eustatius and Saba
|
BR | Brazil |
BS | Bahamas |
BT | Bhutan |
BV | Bouvet Island |
BW | Botswana |
BY | Belarus |
BZ | Belize |
CA | Canada |
CC |
Cocos (Keeling) Islands
|
CD |
Congo, The Democratic Republic of the
|
CF |
Central African Republic
|
CG | Congo |
CH | Switzerland |
CI | Cote d’Ivoire |
CK | Cook Islands |
CL | Chile |
CM | Cameroon |
CN | China |
CO | Colombia |
CR | Costa Rica |
CU | Cuba |
CV | Cape Verde |
CW | Curacao |
CX | Christmas Island |
CY | Cyprus |
CZ | Czech Republic |
DE | Germany |
DJ | Djibouti |
DK | Denmark |
DM | Dominica |
DO |
Dominican Republic
|
DZ | Algeria |
EC | Ecuador |
EE | Estonia |
EG | Egypt |
EH | Western Sahara |
ER | Eritrea |
ES | Spain |
ET | Ethiopia |
EU | Europe |
FI | Finland |
FJ | Fiji |
FK |
Falkland Islands (Malvinas)
|
FM |
Micronesia, Federated States of
|
FO | Faroe Islands |
FR | France |
GA | Gabon |
GB | United Kingdom |
GD | Grenada |
GE | Georgia |
GF | French Guiana |
GG | Guernsey |
GH | Ghana |
GI | Gibraltar |
GL | Greenland |
GM | Gambia |
GN | Guinea |
GP | Guadeloupe |
GQ |
Equatorial Guinea
|
GR | Greece |
GS |
South Georgia and the South Sandwich Islands
|
GT | Guatemala |
GU | Guam |
GW | Guinea-Bissau |
GY | Guyana |
HK | Hong Kong |
HM |
Heard Island and McDonald Islands
|
HN | Honduras |
HR | Croatia |
HT | Haiti |
HU | Hungary |
ID | Indonesia |
IE | Ireland |
IL | Israel |
IM | Isle of Man |
IN | India |
IO |
British Indian Ocean Territory
|
IQ | Iraq |
IR |
Iran, Islamic Republic of
|
IS | Iceland |
IT | Italy |
JE | Jersey |
JM | Jamaica |
JO | Jordan |
JP | Japan |
KE | Kenya |
KG | Kyrgyzstan |
KH | Cambodia |
KI | Kiribati |
KM | Comoros |
KN |
Saint Kitts and Nevis
|
KP |
Korea, Democratic People’s Republic of
|
KR |
Korea, Republic of
|
KW | Kuwait |
KY | Cayman Islands |
KZ | Kazakhstan |
LA |
Lao People’s Democratic Republic
|
LB | Lebanon |
LC | Saint Lucia |
LI | Liechtenstein |
LK | Sri Lanka |
LR | Liberia |
LS | Lesotho |
LT | Lithuania |
LU | Luxembourg |
LV | Latvia |
LY |
Libyan Arab Jamahiriya
|
MA | Morocco |
MC | Monaco |
MD |
Moldova, Republic of
|
ME | Montenegro |
MF | Saint Martin |
MG | Madagascar |
MH | Marshall Islands |
MK | Macedonia |
ML | Mali |
MM | Myanmar |
MN | Mongolia |
MO | Macao |
MP |
Northern Mariana Islands
|
MQ | Martinique |
MR | Mauritania |
MS | Montserrat |
MT | Malta |
MU | Mauritius |
MV | Maldives |
MW | Malawi |
MX | Mexico |
MY | Malaysia |
MZ | Mozambique |
NA | Namibia |
NC | New Caledonia |
NE | Niger |
NF | Norfolk Island |
NG | Nigeria |
NI | Nicaragua |
NL | Netherlands |
NO | Norway |
NP | Nepal |
NR | Nauru |
NU | Niue |
NZ | New Zealand |
OM | Oman |
PA | Panama |
PE | Peru |
PF |
French Polynesia
|
PG |
Papua New Guinea
|
PH | Philippines |
PK | Pakistan |
PL | Poland |
PM |
Saint Pierre and Miquelon
|
PN | Pitcairn |
PR | Puerto Rico |
PS |
Palestinian Territory
|
PT | Portugal |
PW | Palau |
PY | Paraguay |
QA | Qatar |
RE | Reunion |
RO | Romania |
RS | Serbia |
RU |
Russian Federation
|
RW | Rwanda |
SA | Saudi Arabia |
SB | Solomon Islands |
SC | Seychelles |
SD | Sudan |
SE | Sweden |
SG | Singapore |
SH | Saint Helena |
SI | Slovenia |
SJ |
Svalbard and Jan Mayen
|
SK | Slovakia |
SL | Sierra Leone |
SM | San Marino |
SN | Senegal |
SO | Somalia |
SR | Suriname |
SS | South Sudan |
ST |
Sao Tome and Principe
|
SV | El Salvador |
SX | Sint Maarten |
SY |
Syrian Arab Republic
|
SZ | Swaziland |
TC |
Turks and Caicos Islands
|
TD | Chad |
TF |
French Southern Territories
|
TG | Togo |
TH | Thailand |
TJ | Tajikistan |
TK | Tokelau |
TL | Timor-Leste |
TM | Turkmenistan |
TN | Tunisia |
TO | Tonga |
TR | Turkey |
TT |
Trinidad and Tobago
|
TV | Tuvalu |
TW | Taiwan |
TZ |
Tanzania, United Republic of
|
UA | Ukraine |
UG | Uganda |
UM |
United States Minor Outlying Islands
|
US | United States |
UY | Uruguay |
UZ | Uzbekistan |
VA |
Holy See (Vatican City State)
|
VC |
Saint Vincent and the Grenadines
|
VE | Venezuela |
VG |
Virgin Islands, British
|
VI |
Virgin Islands, U.S.
|
VN | Vietnam |
VU | Vanuatu |
WF |
Wallis and Futuna
|
WS | Samoa |
YE | Yemen |
YT | Mayotte |
ZA | South Africa |
ZM | Zambia |
ZW | Zimbabwe |
Hello, I am looking for a code to make a specific payment option available to certain countries, say PayPal should only work for us, Canada, and UK?
Can you help?
Sure, you can refer to the code snippet below for the same:
Hi There,
If I was looking to enable a payment gateway for a single country or group of countries, would I do the following?
if ( isset( $available_payment_gateways[‘bacs’] ) && WC()->customer->get_billing_country() !== ‘US’ ) {
unset( $available_payment_gateways[‘bacs’] );
Thank you in advance.
Hi, I have shared the code snippet as a reply to a comment above, you may refer to the same as the question is similar, hope it is helpful for you 🙂 Apologies for such a long delay in responding.