Legen Sie die Steuer an der Kasse fest, basierend auf der Zahlungsauswahl des Benutzers woocommerce

Lesezeit: 3 Minuten

Benutzer-Avatar
bghaus

Wenn ein Benutzer an der Kasse meines Woocommerce-Shops ist, möchte ich die Steuer auf 0 setzen, wenn er ein bestimmtes Zahlungsgateway wie “paypal_pro”, “cheque”, “bacs” oder in meinem Fall “wdc_woo_credits” auswählt. Dabei handelt es sich um ein Woocredits-Plugin, mit dem Benutzer mit Credits anstelle einer Kreditkarte bezahlen können.

Ich weiß, dass diese Funktion die Steuern korrekt einstellt, denn wenn ich print_r($cart_object) sehe, sehe ich, dass ich alle Steuern auf 0 setze, aber die Kasse wendet die Steuern dennoch auf die Gesamtsumme an.

Ich denke, ich brauche eine Funktion, die die Steuern neu berechnet, nachdem ich sie mit der folgenden Funktion eingestellt habe.

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

Diese Funktion erkennt, welche Zahlungsauswahl sie wählen, und führt die Update-Checkout-Funktion erneut aus. Aber dennoch ist die Steuer immer noch in der Summe.

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
}

Nach langem Googeln fand ich heraus, dass ich mich überhaupt nicht mit den Warenkorbsummen herumschlagen muss. Ich muss den aktuell angemeldeten Kunden ändern.

Ich kann es mit dieser Funktion tun, die Steuern für den aktuell angemeldeten Benutzer entfernt.

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

all dies kommt in die functions.php. Sie benötigen noch die Funktion woocommerce_review_order_before_payment von oben, die den Ajax auslöst. Hier ist also der vollständige Code, um die Steuer auf einem bestimmten Zahlungsgateway nur für eingeloggte Benutzer zu verbergen.

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

1370380cookie-checkLegen Sie die Steuer an der Kasse fest, basierend auf der Zahlungsauswahl des Benutzers woocommerce

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy