要将Woocommerce商店变成地理位置特定国家/地区的目录?

时间:2018-07-09 17:35:12

标签: php wordpress woocommerce geolocation geoip

我试图将woocommerce商店转变为目录模式,具体取决于国家/地区。我只想显示产品的价格并在美国添加到购物车功能。我正在尝试通过使用名为“ GeoIP Detection”的插件在PHP中使用以下代码来实现这一目标:

/* Disable purchasing of products if the country is not United States*/
add_filter('woocommerce_is_purchasable', 'flatsome_woocommerce_is_purchasable', 10, 2);
function flatsome_woocommerce_is_purchasable($is_purchasable, $product) {
    $geoip = geoip_detect2_get_info_from_current_ip();
    $country = $geoip->raw[ 'country' ][ 'iso_code' ];
    if ( 'US' == $country ) { 
        return true;
        }
}
/*filter out prices based on country.*/
    add_filter( 'woocommerce_variable_sale_price_html', 'bdd_remove_prices', 10, 2 );
    add_filter( 'woocommerce_variable_price_html', 'bdd_remove_prices', 10, 2 );
    add_filter( 'woocommerce_get_price_html', 'bdd_remove_prices', 10, 2 );
function bdd_remove_prices( $price, $product ) {
    $geoip = geoip_detect2_get_info_from_current_ip();
    $country = $geoip->raw[ 'country' ][ 'iso_code' ];
    if ( 'US' !== $country )
    {$price = '';}
    return $price;
}

此代码可以正常工作,但无法正常运行。有时我的其他国家的朋友仍然可以看到价格,而且当我自己浏览网站时,我发现一个奇怪的错误,想知道这是否只是缓存问题。

有人可以帮助我改进此代码吗?这对社区也很有帮助。

我对此编码还有一个奇怪的问题:

function flatsome_woocommerce_is_purchasable($is_purchasable, $product) {
    $geoip = geoip_detect2_get_info_from_current_ip();
    $country = $geoip->raw[ 'country' ][ 'iso_code' ];
    if ( 'US' == $country ) { 
        return true;
        }
}

当我写信时:

if ( 'US' !== $country ) { 
        return false;
        }

这行不通,所以我也很好奇为什么。

1 个答案:

答案 0 :(得分:2)

对于Woocommerce,您不需要为此使用任何插件

Woocommerce已经拥有专用的WC_Geolocation类,它将做得更好。

使用Woocommerce WC_Geolocation类的代码:

// Utility function to get geolocated user country based on Woocommerce WC_Geolocation Class
function get_geolocated_user_country(){
   // 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 );

    return $user_geolocation['country'];
}


// Disable purchasing of products if the country is not United States
add_filter('woocommerce_is_purchasable', 'purchasable_country_based', 10, 2);
function purchasable_country_based( $is_purchasable, $product ) {
    // Enable for "US" only geolocated users country
    if( get_geolocated_user_country() ==='US' )
        return true;
    else
        return false;
}
// Filter out prices based on country
add_filter( 'woocommerce_variable_sale_price_html', 'display_prices_country_based', 10, 2 );
add_filter( 'woocommerce_variable_price_html', 'display_prices_country_based', 10, 2 );
add_filter( 'woocommerce_get_price_html', 'display_prices_country_based', 10, 2 );
function display_prices_country_based( $price, $product ) {
    // Enable for "US" only geolocated users country
    if( get_geolocated_user_country() === 'US' )
        return $price;
    else
        return '';
}

代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。

  

现在,如果美国客户要从另一个国家(例如,旅行)进行购买,您可能会遇到一些问题……

Woocommerce Geo IP相关答案: