Изменение налогового класса товаров в корзине Woocommerce в зависимости от выбранного способа оплаты - PullRequest
1 голос
/ 08 апреля 2019

Я пытался реализовать код, найденный на этом сайте, в ряде ответов конкретного пользователя в отношении обновления оформления заказа на основе изменения выбранного платежного шлюза или какого-либо другого изменения поля. Однако, когда JS включен в мой файл функций, моя проверка застревает, и у меня есть ajax, загружающий анимированные круги.

Я уже пытался адаптировать код из:

Запуск события ajax update_checkout при изменении методов доставки в Woocommerce

Обновление события оплаты ajax при выборе платежного шлюза в Woocommerce

При изменении страны Ajax Checkout для доставки в Woocommerce

Изменить кнопку оплаты при оформлении заказа на основе выбранного способа оплаты Woocommerce

add_filter( "woocommerce_product_get_tax_class", "woo_diff_rate_for_user", 1, 2 );
add_filter( "woocommerce_product_variation_get_tax_class", "woo_diff_rate_for_user", 1, 2 );
function woo_diff_rate_for_user( $tax_class, $product ) {

// Get the chosen payment gateway (dynamically)
$chosen_payment_method = WC()->session->get('chosen_payment_method');

 if( $chosen_payment_method == 'wdc_woo_credits'){
        $tax_class = "Zero rate";
    } 

<script type="text/javascript">
        (function($){
            $('form.checkout').on( 'change', 'input[name^="payment_method"]', function() {
                var t = { updateTimer: !1,  dirtyInput: !1,
                    reset_update_checkout_timer: function() {
                        clearTimeout(t.updateTimer)
                    },  trigger_update_checkout: function() {
                        t.reset_update_checkout_timer(), t.dirtyInput = !1,
                        $(document.body).trigger("update_checkout")
                    }
                };
                $(document.body).trigger('update_checkout')
            });
        })(jQuery);
    </script>
     return $tax_class;
}

Если я не включу JS / jQuery, моя функция, которая изменяет класс налога в зависимости от варианта оплаты, работает, когда изменяется способ доставки и страница обновляется при изменении. Но мне нужно, чтобы оформление заказа обновлялось при изменении шлюза оплаты, а не при изменении доставки.

1 Ответ

0 голосов
/ 08 апреля 2019

Вы не можете включить этот вид jQuery-скрипта в ловушку фильтра, и в вашем коде есть ошибки.В любом случае вы не используете правильный код даже для изменения налогового класса.

Код замены:

add_action( 'woocommerce_before_calculate_totals', 'change_tax_class_based_on_payment_method', 10, 1 );
function change_tax_class_based_on_payment_method( $cart ) {
    // Only for a specific defined payment meyhod
    if ( WC()->session->get('chosen_payment_method') !== 'wdc_woo_credits' )
        return;

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

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // Loop through cart items
    foreach( $cart->get_cart() as $cart_item ){
        // We set "Zero rate" tax class
        $cart_item['data']->set_tax_class("Zero rate");
    }
}

add_action('wp_footer', 'payment_methods_trigger_update_checkout');
function payment_methods_trigger_update_checkout() {
    if( is_checkout() && ! is_wc_endpoint_url() ) :
    ?>
    <script type="text/javascript">
        jQuery(function($){
            $( 'form.checkout' ).on('change', 'input[name="payment_method"]', function() {
                $(document.body).trigger('update_checkout');
            });
        });
    </script>
    <?php
    endif;
}

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

Если вы используете плагин Woo Credits , правильный идентификатор платежа - woo_credits, но не wdc_woo_credits.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...