Black Friday & Cyber Monday SUPER SALE ALL WEEK:
Grab 40% OFF on plugins
Days
Hours
Minutes
Seconds

How to disable payment gateways for some countries in WooCommerce

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):

disable payment gateways for some countries in WooCommerce - PayPal disabled for India on the Checkout page

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

 

Browse more in: Code Snippets, WooCommerce How Tos, WooCommerce Tutorials

Share It:

Subscribe
Notify of
4 Comments
Newest
Oldest
Inline Feedbacks
View all comments
Ony
2 years ago

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?

Anthony Topham
3 years ago

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.

4
0
Would love your thoughts, please comment.x
()
x