sourcetip

사용자 결제 선택에 따라 체크아웃 시 세금 설정 우커머스

fileupload 2023. 9. 20. 20:40
반응형

사용자 결제 선택에 따라 체크아웃 시 세금 설정 우커머스

사용자가 내 우커머스 스토어 체크아웃 시 "paypal_pro", "check", "bacs"와 같은 특정 결제 게이트웨이를 선택하거나 나의 경우 "wdc_woo_credits"와 같은 경우 세금을 0으로 설정하고 싶습니다.사용자가 신용카드 대신 신용카드로 결제할 수 있는 우크레딧 플러그인입니다.

인쇄_r($cart_object)를 하면 모든 세금을 0으로 설정하지만, 계산대에서는 여전히 총 세금을 적용하기 때문에 이 함수가 세금을 올바르게 설정한다는 것을 알고 있습니다.

아래의 기능을 이용하여 세금을 설정한 후 다시 계산하는 기능이 필요할 것 같습니다.

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 '</pre>';
}

이 기능은 어떤 결제를 선택하는지 감지하고 업데이트 체크아웃 기능을 다시 실행합니다.그런데도 세금은 여전히 총액입니다.

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
}

여러 번 구글링을 해본 결과 카트 합계를 전혀 조작할 필요가 없다는 것을 알게 되었습니다.현재 로그인한 고객을 변경해야 합니다.

현재 로그인한 사용자의 세금을 제거해주는 이 기능으로 할 수 있습니다.

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

이 모든 것이 기능을 합니다. php.아약스를 트리거하는 위의 wocommerce_review_order_before_payment 함수가 여전히 필요합니다.로그인한 사용자에 대해서만 특정 납부 게이트웨이에 세금을 숨기는 완전한 코드가 여기 있습니다.

// 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
}

언급URL : https://stackoverflow.com/questions/60817371/set-tax-on-checkout-based-off-user-payment-selection-woocommerce

반응형