Damit du nicht extra ein Plugin installieren oder kaufen musst, kannst du mit nachfolgendem Snippet deine eigens festgelegten Gebühren in den WooCommerce Checkout Prozess hinzufügen.
Hast du verschiedene externe Paymentanbieter wie PayPal oder Stripe kann es ganz schön ins Geld gehen, wenn deine Kunden vorzugsweise damit bezahlen. Um das zu verhindern und die jeweilige Gebühr der Anbieter auf deinen Kunden abzuwälzen kannst du die Gebühren dynamisch hinzufügen.
add_action( 'woocommerce_cart_calculate_fees', 'jl_add_fee_to_checkout' );
function jl_add_fee_to_checkout ( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
return;
}
$chosen_payment_id = WC()->session->get('chosen_payment_method');
if ( empty( $chosen_payment_id ) ) {
return;
}
$subtotal = $cart->subtotal;
$subt_1p = $subtotal / 100;
// Kalkulation SEPA Gebühr
$sepa_fee = 0.5 * $subt_1p;
if ( 5 <= round($sepa_fee) ) {
$sepa_fee = 5;
}
// Einstellungen Gebührkalkulation
$targeted_payment_ids = [
//'bacs' => 10, // Banküberweisung 10€ Pauschale
'paypal' => round( (2.49 * $subt_1p) + 0.35, 2), // aktuelle PayPal Gebühren 2,49% + 35 Cent
'ppcp-gateway' => round( (2.49 * $subt_1p) + 0.35, 2), // aktuelle PayPal Gebühren 2,49% + 35 Cent
'stripe' => round( (1.4 * $subt_1p) + 0.25, 2), // aktuelle Stripe Gebühren 1,40% + 35 Cent
'stripe_sepa' => round( $sepa_fee, 2), // aktuelle Stripe Gebühren siehe oben
'stripe_giropay' => round( (1.4 * $subt_1p) + 0.25, 2), // aktuelle Stripe Gebühren 1,40% + 35 Cent
'stripe_sofort' => round( (1.4 * $subt_1p) + 0.25, 2) // aktuelle Stripe Gebühren 1,40% + 35 Cent
];
foreach ( $targeted_payment_ids as $payment_id => $fee_cost ) {
if ( $chosen_payment_id === $payment_id ) {
$label = '';
if ( 'bacs' === $payment_id ) {
$label = '(Kontogebühr)';
}
if ( 'paypal' === $payment_id || 'ppcp-gateway' === $payment_id ) {
$label = '(PayPal)';
}
if ( 'stripe' === $payment_id ) {
$label = '(Stripe Kreditkarten)';
}
if ( 'stripe_sepa' === $payment_id ) {
$label = '(Stripe SEPA)';
}
if ( 'stripe_giropay' === $payment_id ) {
$label = '(Stripe giropay)';
}
if ( 'stripe_sofort' === $payment_id ) {
$label = '(Stripe SOFORT)';
}
// am ende false = ohne Steueraufschlag
$cart->add_fee( 'Bezahlgebühr '.$label, $fee_cost, false );
}
}
}
add_action( 'woocommerce_checkout_init', 'jl_refresh_checkout_on_method_selection' );
function jl_refresh_checkout_on_method_selection() {
wc_enqueue_js( "(function($) {
$('form.checkout').on('change', 'input[name=payment_method]', function() {
$(document.body).trigger('update_checkout');
});
})(jQuery)");
}