Fügen Sie eine benutzerdefinierte Gebühr für prozentuale und feste Kosten zu einem bestimmten Zahlungsgateway in WooCommerce hinzu

Lesezeit: 3 Minuten

Benutzer-Avatar
Dom

In WooCommerce muss ich eine benutzerdefinierte Bearbeitungsgebühr für ein bestimmtes Zahlungsgateway erheben.

Eine kundenspezifische Bearbeitungsgebühr für prozentuale Kosten und eine kundenspezifische Bearbeitungsgebühr pro Fixkosten.

ich habe das 2 Stücke von Codes:

A) PROZENT KOSTEN – Funktion

/************************************************************/
/*  PERCENTACE COST 
**/
// Add a custom fee based o cart subtotal
// Add a custom fee based o cart subtotal

add_action( 'woocommerce_cart_calculate_fees', 'custom_percentage_fee', 20, 1 );
function custom_percentage_fee ( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( ! ( is_checkout() && ! is_wc_endpoint_url() ) )
        return; // Only checkout page

    $payment_method = WC()->session->get( 'chosen_payment_method' );

    if ( 'cod' == $payment_method ) {
        $surcharge = $cart->subtotal * 0.025;
        $cart->add_fee( 'Percentage Cost', $surcharge, true );
    }
}

// jQuery - Update checkout on methode payment change  
add_action( 'wp_footer', 'custom_checkout_jqscript' );
function custom_checkout_jqscript() {
    if ( ! ( is_checkout() && ! is_wc_endpoint_url() ) )
        return; // Only checkout page
    ?>
    <script type="text/javascript">
    jQuery( function($){
        $('form.checkout').on('change', 'input[name="payment_method"]', function(){
            $(document.body).trigger('update_checkout');
        });
    });
    </script>
    <?php
}

Ergebnis-Frontend

Geben Sie hier die Bildbeschreibung ein


B) FIXKOSTEN – Funktion

/************************************************************/
/*  FIXED COST 
**/
// Add a custom fee based o cart subtotal
add_action( 'woocommerce_cart_calculate_fees', 'custom_fixed_fee', 10, 1 );
function custom_fixed_fee ( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( 'cod' === WC()->session->get('chosen_payment_method') ) {
        $fee = 0.31;
        $cart->add_fee( 'Fixed Cost', $fee, true );
    }
}

// jQuery - Update checkout on methode payment change
add_action( 'wp_footer', 'custom_checkout_jqscript' );
function custom_checkout_jqscript() {
    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;
}

Ergebnis-Frontend

Geben Sie hier die Bildbeschreibung ein



Die beiden unterschiedlichen Funktionen arbeiten perfekt getrennt. Jetzt möchte ich die beiden Funktionen kombinieren, um die Summe der beiden Kosten zu erhalten.

Mein Code-Versuch (A + B): Funktionsentwicklung mit Hinzufügung anderer Zahlungssysteme

Geben Sie hier die Bildbeschreibung ein

add_action( 'woocommerce_cart_calculate_fees', 'custom_percentage_fee', 20, 1 );
function custom_percentage_fee ( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

     if ( ! ( is_checkout() && ! is_wc_endpoint_url() ) )
        return; // Only checkout page

    $payment_method = WC()->session->get( 'chosen_payment_method' );

     if ( 'stripe' == $payment_method ) {
        $surcharge = $cart->subtotal * 0.025;
        $fee = 0.31;
    } 
     if ( 'paypal_credit_card_rest' == $payment_method ) {
        $surcharge = $cart->subtotal * 0.036;
        $fee = 0.35;
    }
     if ( 'paypal_express' == $payment_method ) {
        $surcharge = $cart->subtotal * 0.036;
        $fee = 0.35;
    }
     if ( 'bacs' == $payment_method ) {
        return;
    }
  
      $together = $surcharge + $fee;
      $cart->add_fee( 'Plus Cost', $together, true );
}


// jQuery - Update checkout on methode payment change  
add_action( 'wp_footer', 'custom_checkout_jqscript' );
function custom_checkout_jqscript() {
    if ( ! ( is_checkout() && ! is_wc_endpoint_url() ) )
        return; // Only checkout page
    ?>
    <script type="text/javascript">
    jQuery( function($){
        $('form.checkout').on('change', 'input[name="payment_method"]', function(){
            $(document.body).trigger('update_checkout');
        });
    });
    </script>
    <?php
}

Die Funktion gibt die folgenden Fehler zurück:

Hinweis: Undefinierte Variable: Aufpreis in /MY-FOLDER…./snippet-ops.php(446) : eval()’d code on line 79

Hinweis: Undefinierte Variable: Gebühr in /MY FOLDER…./snippet-ops.php(446) : eval()’d code on line 79

Genau das ist hier:

$together = $surcharge + $fee;

Ergebnis-Frontend

Geben Sie hier die Bildbeschreibung ein

Irgendwelche Ratschläge, wie man die 2 obigen Codes zu 1 kombiniert?

  • Wenn eine if-Bedingung erfüllt ist, werden die Variablen gesetzt. Ist dies jedoch nicht der Fall, erhalten Sie die Fehlermeldung ‘Undefinierte Variable’. Sie können dies lösen, indem Sie if / elseif / else verwenden, wobei die Variablen in der else-Bedingung gesetzt werden. Sie können auch die PHP-Funktion isset verwenden oder für die if-Bedingungen die Variablen mit einem Standardwert setzen.

    – 7uc1f3r

    18. Februar 2020 um 7:54 Uhr


Benutzer-Avatar
7uc1f3r

Der Unterschied zwischen den 2 Beispielen, die Sie gepostet haben, ist wirklich minimal. Sie können einfach verwenden:

if ( 'cod' == $payment_method ) {
    $surcharge = $cart->subtotal * 0.025;
    $fee = 0.31;

    $together = $surcharge + $fee;
    $cart->add_fee( 'Plus Cost', $together, true );
}

1016580cookie-checkFügen Sie eine benutzerdefinierte Gebühr für prozentuale und feste Kosten zu einem bestimmten Zahlungsgateway in WooCommerce hinzu

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

Privacy policy