根据类别和Geo IP国家/地区更改WooCommerce产品价格

时间:2019-05-21 作者:Flint

我有一个非常具体的问题。在比利时,当你销售电池时,我们需要增加一项BEBAT税。我现在正在想办法解决这个问题。

下面的代码在某一部分之前都有效,所以我希望我很接近,但我似乎找不到问题所在,希望你们能帮助我。

我正在通过IP查看您所在的国家。基于国家,我想增加额外费用(例如)。99并仅在具有特定类别的产品(例如电池)上添加此选项。

但使用下面的代码,它会显示在所有产品上,即使它们不在该类别中。

我还需要弄清楚如何将此作为文本添加到产品上,并在发票上显示相同的消息。欢迎提供所有提示!

function add_tax_bebat() {
    $getIp      = $_SERVER[\'REMOTE_ADDR\'];
    $ipDetails  = json_decode( @file_get_contents( "http://ipinfo.io/{$getIp}/json" ) );
    $country    = $ipDetails->country;

    if ( $country =="BE" ){
        function return_custom_price($price, $products) {
            $args = array(
                \'category\'  => array( \'batteries\' ),
            );
            $products = wc_get_products( $args );
            $price = ($price+0.99);

            return $price;
        }
        add_filter(\'woocommerce_get_price\', \'return_custom_price\', 10, 2);
    }
}
add_action ( \'init\', \'add_tax_bebat\' );

1 个回复
最合适的回答,由SO网友:LoicTheAztec 整理而成

WooCommerce已经有了地理IP功能,您可以通过WC_Geolocation

我完全重新访问了您的代码。要定位产品类别,可以使用WordPresshas_term() WooCommerce产品类别自定义分类的功能如下:

function is_geo_country_belgium() {
    // 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\'] === \'BE\' ? true : false;
}

add_filter( \'woocommerce_get_price\', \'change_specific_products_price\', 10, 2 );
function change_specific_products_price( $price, $product ) {
    $category = \'batteries\';

    if ( has_term( $category, \'product_cat\', $product->get_id() ) && is_geo_country_belgium() ) {
        $price += 0.99;
    }
    return $price;
} 
代码进入函数。活动子主题(或活动主题)的php文件。已测试并正常工作。

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register