在woocommerce结帐时添加自定义税额

时间:2017-11-19 17:42:52

标签: php wordpress woocommerce checkout fee

我想在woocommerce结帐页面添加自定义%值,但我想仅为瑞士国家展示它并将其隐藏给其他人。现在我有正确的代码为此工作,但问题是当用户选择瑞士时我无法显示它。这是一个代码所以请帮我看看我在这里做错了什么

//Add tax for CH country
add_action( 'woocommerce_cart_calculate_fees','woocommerce_custom_surcharge' );
function woocommerce_custom_surcharge() {
global $woocommerce;

if ( WC()->customer->get_shipping_country('CH') )
    return;

    $percentage = 0.08;
    $taxes = array_sum($woocommerce->cart->taxes);
    $surcharge = ( $woocommerce->cart->cart_contents_total + $woocommerce->cart->shipping_total ) * $percentage;   
    // Make sure that you return false here.  We can't double tax people!
    $woocommerce->cart->add_fee( 'TAX', $surcharge, false, '' );

}

我确定我在这里做错了:

if ( WC()->customer->get_shipping_country('CH') )

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

WC_Customer get_shipping_country() 在您获取国家/地区代码时不接受任何国家/地区代码。因此,您需要在代码条件中以不同方式设置它。

此外,由于您的钩子函数已将WC_Cart对象作为参数,因此您不需要全局$woocommerce$woocommerce->cart ...

所以你重新访问的代码应该是:

// Add tax for Swiss country
add_action( 'woocommerce_cart_calculate_fees','custom_tax_surcharge_for_swiss', 10, 1 );
function custom_tax_surcharge_for_swiss( $cart ) {
    if ( is_admin() && ! defined('DOING_AJAX') ) return;

    // Only for Swiss country (if not we exit)
    if ( 'CH' != WC()->customer->get_shipping_country() ) return;

    $percent = 8;
    # $taxes = array_sum( $cart->taxes ); // <=== This is not used in your function

    // Calculation
    $surcharge = ( $cart->cart_contents_total + $cart->shipping_total ) * $percent / 100;

    // Add the fee (tax third argument disabled: false)
    $cart->add_fee( __( 'TAX', 'woocommerce')." ($percent%)", $surcharge, false );
}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

经过测试和工作......你会得到类似的东西:

enter image description here

  

但是对于税收,您最好在设置&gt;中使用默认的WooCommerce税务功能。税(标签),其中con可以设置每个国家/地区的税率......