Zahlungsmethode basierend auf dem Produkttyp in WooCommerce ausblenden

Lesezeit: 3 Minuten

Zahlungsmethode basierend auf dem Produkttyp in WooCommerce ausblenden
Jeff W

In WoCommerce möchte ich bestimmte Zahlungsmethoden deaktivieren und bestimmte Zahlungsmethoden für ein Abonnementprodukt in WooCommerce anzeigen (und umgekehrt).

Dies ist das nächste, was wir gefunden haben, aber es tut nicht das, was ich erwarte.

Ja, es gibt Plugins, die dies tun, aber wir möchten dies erreichen, ohne ein weiteres Plugin zu verwenden und ohne unser Stylesheet noch alptraumhafter zu machen, als es ohnehin schon ist.

Irgendwelche Hilfe dazu bitte?

Zahlungsmethode basierend auf dem Produkttyp in WooCommerce ausblenden
LoicTheAztec

Hier ist ein Beispiel mit einer benutzerdefinierten Hook-Funktion woocommerce_available_payment_gateways Filter-Hook, wo ich Zahlungs-Gateways basierend auf den Warenkorbartikeln (Produkttyp) deaktivieren kann:

add_filter('woocommerce_available_payment_gateways', 'conditional_payment_gateways', 10, 1);
function conditional_payment_gateways( $available_gateways ) {
    // Not in backend (admin)
    if( is_admin() ) 
        return $available_gateways;

    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        $prod_variable = $prod_simple = $prod_subscription = false;
        // Get the WC_Product object
        $product = wc_get_product($cart_item['product_id']);
        // Get the product types in cart (example)
        if($product->is_type('simple')) $prod_simple = true;
        if($product->is_type('variable')) $prod_variable = true;
        if($product->is_type('subscription')) $prod_subscription = true;
    }
    // Remove Cash on delivery (cod) payment gateway for simple products
    if($prod_simple)
        unset($available_gateways['cod']); // unset 'cod'
    // Remove Paypal (paypal) payment gateway for variable products
    if($prod_variable)
        unset($available_gateways['paypal']); // unset 'paypal'
    // Remove Bank wire (Bacs) payment gateway for subscription products
    if($prod_subscription)
        unset($available_gateways['bacs']); // unset 'bacs'

    return $available_gateways;
}

Code geht in die function.php-Datei Ihres aktiven Child-Themes (oder Themes) oder auch in jede Plugin-Datei.

Der gesamte Code wurde auf Woocommerce 3+ getestet und funktioniert.

Dies ist nur ein Beispiel, um Ihnen zu zeigen, wie die Dinge funktionieren können. Sie müssen es anpassen

  • Tschüss, Loic! Wir werden dem einen Wirbel geben und ich werde Sie wissen lassen, wenn ich etwas kaputt mache – vielen Dank!

    – Jeff W

    20. September 2017 um 21:00 Uhr

  • @LoicTheAztec was passiert, wenn 2 Produkte auf der Karte sind und sie keine passende Zahlungsmethode haben?

    – Tobias

    20. August 2018 um 14:44 Uhr

  • @Tobias Du kannst die Bestellung nicht fortsetzen…

    – LoicTheAztec

    20. August 2018 um 14:46 Uhr


  • Der Code erzeugte einige Fehler im Backend in den Woocommerce-Gateway-Einstellungen. Fügen Sie einfach ein if( !is_admin ) in die Funktion ein und geben Sie die ursprünglichen Gateways zurück, und es funktioniert

    – Tobias

    21. August 2018 um 6:43 Uhr

  • @Tobias Ja, Sie haben sicherlich Recht, da das Backend kein Cart-Objekt mag. Ich habe die Antwort aktualisiert. Danke.

    – LoicTheAztec

    21. August 2018 um 6:47 Uhr


Dieser Code war sehr nützlich für mich, aber er enthält einen Fehler, den ich beheben musste: die Zeile

 $prod_variable = $prod_simple = $prod_subscription = false;

muss AUSSERHALB (vor) FOREACH gesetzt werden, sonst wird das Flag jedes Mal zurückgesetzt, wenn ein neues Element ausgeführt wird. In meinem Fall musste ich eine bestimmte Zahlungsmethode deaktivieren, wenn sich ein Abonnementprodukt im Warenkorb befand. So wie er ist, funktioniert dieser Code nur, wenn es nur ein einziges Abonnementprodukt gibt. Wenn ich einen anderen Artikel in den Einkaufswagen lege, wird das Flag wieder auf „false“ gesetzt und die Zahlungsmethode wird geladen. Wenn Sie die Zeile außerhalb von FOREACH platzieren, wird dieses Problem behoben.

  • Nochmals, was ist, wenn wir mehrere Produkte in den Warenkorb legen?

    – Mujtaba

    6. Mai 2020 um 16:08 Uhr

  • @Mujtaba es iteriert über sie, sodass es auch mit mehreren Produkten funktioniert

    – davbuc

    22. September 2020 um 18:40 Uhr


1003850cookie-checkZahlungsmethode basierend auf dem Produkttyp in WooCommerce ausblenden

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

Privacy policy