Überprüfen Sie die WooCommerce-Benutzerrolle und das Zahlungsgateway und wenn sie übereinstimmen, wenden Sie eine Gebühr an

Lesezeit: 3 Minuten

Ich habe Probleme damit, eine Gebühr für eine Reihe von Benutzerrollen zu erheben, wenn ein bestimmtes Zahlungsgateway ausgewählt wird.

Der Code, den ich geschrieben habe, funktioniert gut, wenn ich die Benutzerrolle nicht überprüfe, aber sobald ich das versuche und tue, funktioniert es nicht.

Ich habe die Benutzerrolle entfernt (kommentiert). if Anweisung im Code und ich bitte um Hilfe, damit es funktioniert.

Ich muss überprüfen, ob die Benutzerrolle mit meiner übereinstimmt array und wenn ja, überprüfen Sie das Zahlungsgateway. Wenn das Zahlungsgateway ebenfalls übereinstimmt, wenden Sie die Gebühr an.

Das ist mein Code:

add_action( 'woocommerce_cart_calculate_fees', 'custom_fee', 20, 1 );
function custom_fee ($cart){

    if (is_admin() && !defined('DOING_AJAX')) return;

    if (!is_user_logged_in()) return;

    if (!is_checkout() && !is_wc_endpoint_url()) return;

    $customer_role = wp_get_current_user();
    $roles_to_check = array( 'vendor', 'external' );
    $payment_method = WC()->session->get('chosen_payment_method');

        // if (!in_array($roles_to_check, $customer_role->roles)) return;

    if ('bacs' == $payment_method){
        $payment_fee = $cart->subtotal * 0.05;
            $cart->add_fee( 'Payment Fee', $payment_fee, true );
    }
}

Uberprufen Sie die WooCommerce Benutzerrolle und das Zahlungsgateway und wenn sie
7uc1f3r

Sie könnten die folgende Erklärung mit im Code hinzugefügten Kommentaren verwenden

Bedingungen, die in diesem Code erfüllt sein müssen, sind:

  • nur für bestimmte Benutzerrollen
  • Überprüfung der Zahlungsmethode
function custom_fee( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;
    
    if ( ! ( is_checkout() && ! is_wc_endpoint_url() ) )
        return; // Only checkout page
    
    if ( ! is_user_logged_in())
        return;

    // Get current WP_User Object
    $user = wp_get_current_user();
    
    // User roles
    $roles = ( array ) $user->roles;

    // Roles to check
    $roles_to_check = array( 'vendor', 'external', 'administrator' );
    
    // Compare
    $compare = array_diff( $roles, $roles_to_check );

    // Result is empty
    if ( empty ( $compare ) ) {
        // Payment method
        $payment_method = WC()->session->get('chosen_payment_method');

        // Condition equal to
        if ( $payment_method == 'bacs' ) { 
            // Calculate
            $payment_fee = $cart->subtotal * 0.05;

            // Add fee
            $cart->add_fee( 'Payment Fee', $payment_fee, true );
        }
    }
}
add_action( 'woocommerce_cart_calculate_fees', 'custom_fee', 10, 1 );

BEARBEITEN

Um meine Antwort zu vervollständigen, siehe die Antwort von @LoicTheAztec

  • Wie bekommt man das beim “check,-out/order-pay” zum Laufen?

    – Wanderlust-Beratung

    13. Oktober 2020 um 21:26 Uhr

Die Antwort von @ 7uc1f3r ist gut, aber etwas wichtiges fehlt es.

In der WooCommerce-Kaufabwicklung werden bei der Auswahl einer Zahlungsmethode die Bezahlsummen nicht aktualisiert. Es ist also etwas Zusätzliches erforderlich, um den Abschnitt “Bestellüberprüfung” an der Kasse zu aktualisieren:

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

Der Code wird in die Datei functions.php Ihres aktiven untergeordneten Designs (oder aktiven Designs) eingefügt. Getestet und funktioniert.

Verwandte: Fügen Sie eine Gebühr hinzu, die auf bestimmten Zahlungsmethoden in WooCommerce basiert

1004570cookie-checkÜberprüfen Sie die WooCommerce-Benutzerrolle und das Zahlungsgateway und wenn sie übereinstimmen, wenden Sie eine Gebühr an

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

Privacy policy