So kannst du in WooCommerce Bezahloptionen nach Benutzerrollen definieren.
Marc Wagner
November 11, 2020
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 Benutzerrolle | Slug |
Editor | editor |
Author | author |
Administrator | administrator |
Contributor | contributor |
Subscriber | subscriber |
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.
Artikel von:
Marc Wagner
Hallo, Marc hier. Ich bin der Gründer von Forge12 Interactive und bereits seit über 20 Jahren leidenschaftlich dabei Webseiten, Onlineshops, Anwendungen und SaaS-Lösungen für Unternehmen zu entwickeln. Vor der Gründung habe ich bereits in Börsen notierten Unternehmen gearbeitet und mir allerlei Wissen angeeignet. Dieses Wissen möchte ich nun an meine Kunden weitergeben.
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
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
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!
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.
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
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
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
Hallo Martin,
leider nicht.
VG
Marc