如何在购物篮上显示正确的税(结账前)?

时间:2014-08-27 12:21:55

标签: wordpress-plugin woocommerce

我有一个简单的问题。

我为不同的国家/地区设置了多种税率。 但是,在篮子页面上 - 到目前为止没有访问过结账页面 - 它显示了来自基准国家的税。

就我而言:我在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/

好的,我可以通过脚本改变这个吗?

感谢您的帮助。

1 个答案:

答案 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;
}