Отключить налог для биллинговой компании и конкретной страны выставления счетов в кассе WooCommerce - PullRequest
1 голос
/ 15 мая 2019

В кассе 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 "Хорватия".

Как мне этого добиться?

enter image description here

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Вы можете сделать проверку обновлений поля проверки платежной компании с помощью следующего (без использования какого-либо дополнительного кода 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);

    $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 );
    }
}

Код помещается в файл functions.php вашей активной дочерней темы (или активной темы). Протестировано и работает.

Примечание: Со временем global $woocommerce и $woocommerce заменяются просто на WC()

0 голосов
/ 16 мая 2019

Поскольку при изменении #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 вы можете использовать свой код и пользователя: $ billing_country == 'HR', чтобы проверить страну Хорватия

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 );
        }

}
...