我有一个非常具体的问题。在比利时,当你销售电池时,我们需要增加一项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\' );
最合适的回答,由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文件。已测试并正常工作。