php 在WooCommerce结帐中禁用公司和特定国家的税收

klh5stk1  于 2022-11-21  发布在  PHP
关注(0)|答案(3)|浏览(171)

在Woocommerce结帐,我试图删除税,如果billing_company不为空:
这是我的代码

add_action( 'woocommerce_checkout_update_order_review', 'bbloomer_taxexempt_checkout_based_on_zip' );

function bbloomer_taxexempt_checkout_based_on_zip( $post_data ) {
        global $woocommerce;
        $woocommerce->customer->set_is_vat_exempt( false );
        $Pay_options=$_POST['Pay_options'];
        parse_str($post_data);
        global $woocommerce;

        if ( $billing_company != null) $woocommerce->customer->set_is_vat_exempt( true );
}

IF语句中,我还需要检查billing_country是否为“Croatia”。
我如何才能做到这一点?

8yparm6h

8yparm6h1#

您可以使用以下代码 (不使用任何附加javascript或jQuery代码) 使计费公司结帐字段在更改时更新结帐,并检查国家/地区“HR”(克罗地亚)

add_filter( 'woocommerce_checkout_fields' , 'billing_company_trigger_update_checkout_on_change', 10, 1 );
function billing_company_trigger_update_checkout_on_change( $fields ) {

    $fields['billing']['billing_company']['class'][] = 'update_totals_on_change';

    return $fields;
}

add_action( 'woocommerce_checkout_update_order_review', 'checkout_vat_exempt_based_on_billing_company', 10, 1 );
function checkout_vat_exempt_based_on_billing_company( $post_data ) {
    parse_str($post_data, $results); // Since Php 7.2, the 2nd argument is recommended in parse_str() function
    extract($results);

    $customer = WC()->customer;

    // When billing company is filled and country is Croatia: Exempt taxes
    if ( ! empty($billing_company) && $billing_country === 'HR' && ! $customer->is_vat_exempt() ) {
        $customer->set_is_vat_exempt( true );
    }
    elseif ( $customer->is_vat_exempt() ){
        $customer->set_is_vat_exempt( false );
    }
}

要处理发货国家而不是开单国家,只需将代码中的变量$billing_country替换为**$shipping_country**

  • 代码进入您的活动子主题(或活动主题)的functions.php文件。* 测试和工程。
    **注意:**有一段时间以来,global $woocommerce$woocommerce被简单地替换为WC()
4uqofj5v

4uqofj5v2#

因为在#billing_company更改时,没有更新结帐的操作。所以您需要一个javascript来执行此操作

add_action('woocommerce_after_checkout_form',function($checkout){
    ?>
    <script type="text/javascript">
    jQuery(function($){
        $(document).on('change','#billing_company',function(){
            $(document.body).trigger("update_checkout");
        });
    });
    </script>
    <?php
});

而在php中,您可以使用您的代码和user:$billing_country == '人力资源'检查克罗地亚国家

add_action( 'woocommerce_checkout_update_order_review', 'bbloomer_taxexempt_checkout_based_on_zip' );

function bbloomer_taxexempt_checkout_based_on_zip( $post_data ) {
        global $woocommerce;
        $woocommerce->customer->set_is_vat_exempt( false );
        $Pay_options=$_POST['Pay_options'];
        parse_str($post_data);
        if ( $billing_company != null) 
            $woocommerce->customer->set_is_vat_exempt( true );
        if($billing_country == 'HR'){ // Croatia
            // Do what you need, for example set TAX
            $woocommerce->customer->set_is_vat_exempt( false );
        }

}
xnifntxz

xnifntxz3#

我认为以上的答案只有在你更新购物车的时候才能在结账页面上删除税费。在订单确认等页面上仍然会有税费。下面是如何在所有地方删除税费的方法:

// from https://elliottrichmond.co.uk/woocommerce-how-to-make-a-user-exempt-from-tax-charges/
function wooc_user_tax_exempt_callback($wc_tax_enabled) {
    $cart = WC()->cart;

    $customer = WC()->customer;

    parse_str($post_data);
    // When billing company is filled and country is Croatia: Exempt taxes
    if ( ! empty($billing_company) && $billing_country === 'HR' && ! $customer->is_vat_exempt() ) {
        $wc_tax_enabled = false;
    }
    return $wc_tax_enabled;

}
add_filter( 'wc_tax_enabled', 'wooc_user_tax_exempt_callback', 10, 1);

相关问题