我有一个简单的问题。
我为不同的国家/地区设置了多种税率。 但是,在篮子页面上 - 到目前为止没有访问过结账页面 - 它显示了来自基准国家的税。
就我而言:我在AT有一家商店。我为AT和CH设定了税金。 如果用户访问瑞士IP,我将国家/地区列表限制为瑞士,并设置PHP变量。然而,国家不再是woocommerce_countries,WC用基本国家税收设定计算税收。
查看这些图片:
taxes in basket - taxes on checkout
我希望在结账前显示正确的税金。 我已经发现,当用户在结帐页面上选择了一个国家/地区时,会显示正确的税金,以及" $ woocommerce->客户"节点可用。 但我很难做到这一点。
任何人都知道如何做到这一点? 这是我的插件代码不起作用:
define('USERCOUNTRY', get_country_proper()); // returns 'CH'
$customer = new WC_Customer();
WC()->customer->set_country(USERCOUNTRY);
结果:
Fatal error: Call to a member function get() on a non-object in wp-content/plugins/woocommerce/includes/class-wc-customer.php on line 27
更新: 将在CART页面上使用的税(在CHECKOUT上输入国家之前):
Woocommerce - >设置 - >税 - >默认客户地址:[Shop Base country |没有] http://docs.woothemes.com/document/setting-up-taxes-in-woocommerce/
好的,我可以通过脚本改变这个吗?
感谢您的帮助。
答案 0 :(得分:1)
实际上,有一个钩子。
// this is used for taxing:
add_filter('woocommerce_countries_base_country', 'set_base_to_usercountry', 1, 1);
// and this is used for shipping:
add_filter('woocommerce_customer_default_location', 'set_base_to_usercountry', 1, 1);
function set_base_to_usercountry($country) {
$country = USERCOUNTRY; // comes from a geoIP lookup in my case.
return $country;
}
// and this is also needed not to have trouble with the "modded_tax".
// (which looks like rounding issues, but is a tax conversion issue.)
add_filter('woocommerce_customer_taxable_address', 'alter_taxable_address', 1, 1);
function alter_taxable_address($address) {
// $address comes as an array with 4 elements.
// first element keeps the 2-digit country code.
$address[0] = USERCOUNTRY;
return $address;
}