So kannst du in WooCommerce Bezahloptionen nach Benutzerrollen definieren.

Nicht immer möchte man, das alle Besucher auch alle Bezahlmethoden verwenden können. Gerade wenn es Neukunden sind, ist man gewohnt etwas vorsichtiger. Standardmäßig lassen sich jedoch nur alle Zahlungsmethoden global aktivieren oder deaktivieren.

Dabei kann man das bequem mit wenigen Zeilen Code individuell anpassen.

Der fertige Code #

Wir starten wie gewohnt mit dem kompletten Code, den du einfach in die functions.php eintragen kannst.

<?php
function setPaymentOptionsByUserRole( $availablePaymentGateways ) {
    if ( is_user_logged_in() ) {

        $allowedPaymentGateways = array();
        $user = wp_get_current_user();

        if ( array_intersect( array('merchant'), $user->roles )) {
            $allowedPaymentGateways = array(
                'bacs',
                'direct-debit',
                'ppec_paypal',
                'paypal_plus',
            );
        }

        if(!empty($allowedPaymentGateways)) {
            foreach ( $availablePaymentGateways as $slug => $gateway ) {
                if ( ! in_array( $slug, $allowedPaymentGateways ) ) {
                    unset( $availablePaymentGateways[ $slug ] );
                }
            }
        }
    }else{
        /*
         * We can use the else loop to change the payment gateways for 
         * guests.
         */
        $allowedPaymentGateways = array(
            'bacs',
            'direct-debit',
            'ppec_paypal',
            'paypal_plus',
        );

        if(!empty($allowedPaymentGateways)) {
            foreach ( $availablePaymentGateways as $slug => $gateway ) {
                if ( ! in_array( $slug, $allowedPaymentGateways ) ) {
                    unset( $availablePaymentGateways[ $slug ] );
                }
            }
        }
    }

    return $availablePaymentGateways;
}

add_filter('woocommerce_available_payment_gateways', 'setPaymentOptionsByUserRole', 90, 1);

Das ganze lässt sich endlos erweitern. In unserem Beispiel haben wir die Bezahlmethoden für alle Benutzer mit der Benutzerrolle “merchant” auf PayPal, Überweisung, Lastschrift und Kreditkarte beschränkt.

if ( array_intersect( array('merchant'), $user->roles )) {
	$allowedPaymentGateways = array(
		'bacs',
		'direct-debit',
		'ppec_paypal',
		'paypal_plus',
	);
}

Alle anderen Bezahlmethoden werden anschließend entfernt.

if(!empty($allowedPaymentGateways)) {
	foreach ( $availablePaymentGateways as $slug => $gateway ) {
		if ( ! in_array( $slug, $allowedPaymentGateways ) ) {
			unset( $availablePaymentGateways[ $slug ] );
		}
	}
}

So kannst du weitere Rollen einschränken #

Du kannst weitere Rollen hinzufügen, indem du den folgenden Block kopierst und direkt darunter einfügst.

if ( array_intersect( array('<user_role>'), $user->roles )) {
	$allowedPaymentGateways = array();
}

Ersetze ‘<user_role>’ durch die gewünschte Benutzerrolle.

WordPress BenutzerrolleSlug
Editoreditor
Authorauthor
Administratoradministrator
Contributorcontributor
Subscribersubscriber
WordPress Benutzerrollen

Das war es auch schon. Mit wenigen Zeilen Code lässt sich der Bezahlprozess bequem anpassen. Ich hoffe, der Artikel war hilfreich für dich. Falls du Fragen hast, freuen wir uns natürlich, diese für dich zu beantworten.

Hier klicken, um den Beitrag zu bewerten
[Gesamt: 1 Durchschnitt: 5]

8 Kommentare

  1. Benutzerbild von Christoph
    Christoph Juli 4, 2022 um 09:07 Uhr- Antworten

    Hallo,

    danke für den sehr hilfreichen Code. Ist es möglich, dass man diesen auch auf nicht eingeloggte user also gast Einkäufer anwendet?

    beste Grüße

    • Benutzerbild von Marc Wagner
      Marc Wagner Juli 4, 2022 um 09:30 Uhr- Antworten

      Hallo Christoph,

      vielen Dank für deinen Kommentar. Ich habe den fertigen Code angepasst, um individuelle Bezahlmethoden für Gäste (nicht eingeloggte Benutzer) einzuschränken.

      Viele Grüße
      Marc

      • Benutzerbild von Christoph
        Christoph Juli 4, 2022 um 10:40 Uhr- Antworten

        Hi,

        wow, vielen dank für die rasche Antwort und di eAnpassung. Das hilft mir sehr!

        Gibt es auch eine Möglichkeit die Option umzukehren, dass nur gewisse Optionen ausgeblendet werden anstatt die ganze liste anzuführen, welche payment options erlaubt sind?

        Also quasi, Bezahlung auf Rechnung für User Role XX oder Gäste ausblenden?

        Danke dir!

        • Benutzerbild von Marc Wagner
          Marc Wagner Juli 4, 2022 um 13:12 Uhr- Antworten

          Es müsste schon reichen, wenn du aus !in_array einfach in_array machst. Dadurch sollte er nur die entfernen, die in $allowedPaymentGateways hinterlegt wurden.

  2. Benutzerbild von Tobias
    Tobias Oktober 13, 2022 um 16:48 Uhr- Antworten

    Hallo,

    danke für den Code, ich glaube das ist genau das was ich gesucht habe.

    Ich suche etwas, wo man nur eine Zahlungsmethode (auf Rechnung) für eine Benutzergruppe freischaltet (normal ist diese Zahlungsart nicht aktiviert).

    Aber gibt es sowas auch als Plugin, dass es übersichtlicher ist?
    Woher weiß ich denn wie die Zahlungsmethoden heißen oder die zusätzlichen Benutzerrollen?
    Muss ich da in der Datenbank nachsehen wie die benannt sind?

    Grüße und Danke
    Tobias

    • Benutzerbild von Marc Wagner
      Marc Wagner Oktober 15, 2022 um 13:22 Uhr- Antworten

      Hallo Tobias,
      da die Zahlungsmethoden sich von Shop zu Shop unterscheiden, würde ich mir einfach alle kurz ausgeben lassen, in dem ich den Code am Anfang der Funktion einfüge:

      if(current_user_can('manage_options')){
      var_dump($availablePaymentGateways);
      }

      Durch die if-Abfrage selbst du sicher, dass die Ausgabe nur für Benutzer sichtbar ist, die auch Rechte haben, Optionen im Backend zu verändern. Dadurch können deine Besucher weiterhin Einkaufen während du die Bezahlmethoden anpasst.

      Viele Grüße
      Marc

  3. Benutzerbild von Martin
    Martin Oktober 22, 2022 um 10:02 Uhr- Antworten

    Hallo Marc,

    Kann man damit auch einstellen, dass Gäste nur bis zum Beispiel 99€ auf Rechnung zahlen können und darüber hinaus nur Bestandskunden?

    Viele Grüße

    Martin

    • Benutzerbild von Marc Wagner
      Marc Wagner Oktober 24, 2022 um 12:22 Uhr- Antworten

      Hallo Martin,

      leider nicht.

      VG
      Marc

Hinterlasse einen Kommentar

Titel