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
}