在我的Woocommerce商店中,我设置了地理位置系统,当地理位置识别除IT以外的任何国家/地区我想要禁用付款方式
如果是IT(geop-ip),请显示付款。
如果是所有其他国家/地区(地理位置),请停用付款。
答案 0 :(得分:2)
这是@LoicTheAztec 答案的一个变体,它仅禁用特定的付款方式而不是全部:
add_filter( 'woocommerce_available_payment_gateways', 'geo_country_based_available_payment_gateways', 90, 1 );
function geo_country_based_available_payment_gateways( $available_gateways ) {
// Not in backend (admin)
if( is_admin() )
return $available_gateways;
// ==> HERE define your country codes
$allowed_country_codes = array('DE','AT');
// Get an instance of the WC_Geolocation object class
$geolocation_instance = new WC_Geolocation();
// Get user IP
$user_ip_address = $geolocation_instance->get_ip_address();
// Get geolocated user IP country code.
$user_geolocation = $geolocation_instance->geolocate_ip( $user_ip_address );
// Disable payment gateways for all countries except the allowed defined coutries
if ( ! in_array( $user_geolocation['country'], $allowed_country_codes ) ) {
unset( $available_gateways['stripe_sofort'] );
}
return $available_gateways;
}
答案 1 :(得分:1)
要查找用户所在的国家/地区,您可以使用FreeGeoIp, now renamed to Ipstack等工具。您为该服务提供IP地址,它将告诉您该用户可能在的国家/地区(以及其他信息)。
有两种选择 1.使用他们的托管API(免费提供10,000个请求并支付更多费用) 2.从GitHub链接下载一个版本并自己托管
当您需要了解用户的国家/地区时,您可以使用用户的IP地址向API发送HTTP请求,然后使用该信息启用或停用付款方式。
答案 2 :(得分:1)
我知道Istack,以及maxmind等。 我认为这个函数更简单,它基于blling_country而不是geo-ip国家:
function payment_gateway_disable_country( $available_gateways ) {
global $woocommerce;
if ( is_admin() ) return;
if ( isset( $available_gateways['authorize'] ) && $woocommerce->customer->get_billing_country() <> 'US' ) {
unset( $available_gateways['authorize'] );
} else if ( isset( $available_gateways['paypal'] ) && $woocommerce->customer->get_billing_country() == 'US' ) {
unset( $available_gateways['paypal'] );
}
return $available_gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_country' );
答案 3 :(得分:1)
Woocommerce已经通过WC_Geolocation
class提供了地理位置IP功能,因此您不需要任何其他插件。
以下是禁用所有国家/地区的付款网关的方法,除非&#34; IT&#34; (意大利)国家/地区代码,基于客户地理位置的IP国家/地区:
// Disabling payment gateways except for the defined country codes based on user IP geolocation country
add_filter( 'woocommerce_available_payment_gateways', 'geo_country_based_available_payment_gateways', 90, 1 );
function geo_country_based_available_payment_gateways( $available_gateways ) {
if ( is_admin() ) return; // Only on front end
// ==> HERE define your country codes
$allowed_country_codes = array('IT');
// Get an instance of the WC_Geolocation object class
$geolocation_instance = new WC_Geolocation();
// Get user IP
$user_ip_address = $geolocation_instance->get_ip_address();
// Get geolocated user IP country code.
$user_geolocation = $geolocation_instance->geolocate_ip( $user_ip_address );
// Disable payment gateways for all countries except the allowed defined coutries
if ( ! in_array( $user_geolocation['country'], $allowed_country_codes ) )
$available_gateways = array();
return $available_gateways;
}
代码放在活动子主题(或活动主题)的function.php文件中。经过测试和工作。