Установить налог на оформление заказа на основе выбора оплаты пользователем woocommerce - PullRequest
6 голосов
/ 23 марта 2020

Когда пользователь входит в кассу моего магазина woocommerce, я хочу установить налог на 0, если он выберет определенный платежный шлюз, такой как "paypal_pro", "check", "bacs" или в моем случае "wdc_woo_credits". Это плагин woocredits, который позволяет пользователям расплачиваться кредитами, а не кредитной картой.

Я знаю, что эта функция правильно устанавливает налоги, потому что когда я печатаю _r ($ cart_object), я вижу, что я устанавливаю все налоги на 0, но все же касса по-прежнему применяется налог в общей сумме.

Я думаю, что мне нужна функция, которая пересчитывает налоги после того, как я установил ее, используя функцию ниже.

<code>add_action( 'woocommerce_cart_calculate_fees','shipping_method_discount', 20, 1 );
function shipping_method_discount( $cart_object ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;

    $chosen_payment_method = WC()->session->get('chosen_payment_method');

    //if( $chosen_payment_method == 'cheque' ){
    if( $chosen_payment_method == 'wdc_woo_credits' ){
        $cart_object->set_cart_contents_taxes(0);
        $cart_object->set_cart_contents_tax(0);
        $cart_object->set_subtotal_tax(0);
        $cart_object->set_shipping_tax(0);
        $cart_object->set_total_tax(0);
        $cart_object->set_fee_tax(0);
        $cart_object->set_fee_taxes(0);
        $cart_object->set_subtotal_tax(0);
        foreach($cart_object->cart_contents as $product){
            $cart_object->cart_contents[$product['key']]['line_tax'] = 0;
            $cart_object->cart_contents[$product['key']]['line_subtotal_tax'] = 0;
            $cart_object->cart_contents[$product['key']]['line_tax_data']['subtotal'] = 0;
            $cart_object->cart_contents[$product['key']]['line_tax_data']['total'] = 0;
        }
    }
   //echo '<pre>'; print_r($cart_object); echo '
'; }

Эта функция определяет выбор выбранного платежа и повторно запускает функцию проверки обновлений. Но все же налог все еще в сумме.

add_action( 'woocommerce_review_order_before_payment', 'refresh_payment_methods' );
function refresh_payment_methods(){
    // jQuery code
    ?>
    <script type="text/javascript">
        (function($){
            $( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() {
                $('body').trigger('update_checkout');
            });
        })(jQuery);
    </script>
    <?php
}

1 Ответ

4 голосов
/ 26 марта 2020

После долгих поисков я обнаружил, что мне вообще не нужно возиться с итогами корзины. Мне нужно изменить текущего зарегистрированного клиента.

Я могу сделать это с помощью этой функции, которая снимает налог с текущего зарегистрированного пользователя.

WC()->customer->set_is_vat_exempt( true );

все это входит в функции. php. Вам все еще нужна функция woocommerce_review_order_before_payment сверху, которая вызывает ajax. Вот полный код, позволяющий скрыть налог на определенный платежный шлюз только для зарегистрированных пользователей.

// calculate fees on checkout page
add_action( 'woocommerce_cart_calculate_fees','shipping_method_discount', 20, 1 );
function shipping_method_discount( $cart_object ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;

    $chosen_payment_method = WC()->session->get('chosen_payment_method');

    //if( $chosen_payment_method == 'cheque' ){
    if( $chosen_payment_method == 'wdc_woo_credits' ){
        // if user buys with credits, dont allow tax.
        WC()->customer->set_is_vat_exempt( true );
    }else{
        // if user buys with credit card, allow tax
        WC()->customer->set_is_vat_exempt( false );
    }
}

// refresh the checkout page totals once user selects
add_action( 'woocommerce_review_order_before_payment', 'refresh_payment_methods' );
function refresh_payment_methods(){
    // jQuery code
    ?>
    <script type="text/javascript">
        (function($){
            $( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() {
                $('body').trigger('update_checkout');
            });
        })(jQuery);
    </script>
    <?php
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...