Navigation überspringen

Dies ist das technische Support-Forum für WPML – das mehrsprachige WordPress-Plugin.

Mitlesen können alle, doch nur WPML-Kunden können hier Fragen veröffentlichen. Das WPML-Team antwortet im Forum an 6 Tagen pro Woche, 22 Stunden am Tag.

Sun Mon Tue Wed Thu Fri Sat
- - 9:00 – 18:00 9:00 – 18:00 9:00 – 18:00 9:00 – 18:00 9:00 – 18:00
- - - - - - -

Unterstützt die Zeitzone: America/Lima (GMT-05:00)

Dieses Thema enthält 6 Antworten, hat 0 Stimmen.

Zuletzt aktualisiert von patrickA-31 Vor 36 Minuten.

Assistiert von: Andreas W..

Verfasser Beiträge
April 4, 2025 at 10:34 am #16896817

patrickA-31

Background of the issue:
Ich biete in unserem WooCommerce-Shop mehrere Währungen zur Bezahlung an. Da unser Bankkonto nur Euro akzeptiert, habe ich über Wise zusätzliche Bankkonten in verschiedenen Währungen erstellt und diese in den WooCommerce-Einstellungen unter „Zahlung – Banküberweisung“ hinterlegt. Der Name dieser Konten ist stets „PAN Terra GmbH“, was zu Verwirrung führt, wenn ich die Bankkonten in WPML einer bestimmten Währung zuordne.

---
Hallo,

ich biete in unserem WooCommerce-Shop mehrere Währungen zur Bezahlung an.
Da unser Bankkonto nur Euro akzeptiert, habe ich über Wise (versteckter Link) zusätzliche Bankkonten in verschiedenen Währungen erstellt und diese in den WooCommerce-Einstellungen unter „Zahlung – Banküberweisung“ hinterlegt (siehe Screenshot unten).

Der Name dieser Konten ist stets „PAN Terra GmbH“, was zu Verwirrung führt, wenn ich die Bankkonten in WPML einer bestimmten Währung zuordne (siehe Screenshot anbei).

Zusätzlich erhält der Kunde bei der Bestellbestätigung und Zahlungsaufforderung eine E-Mail mit allen hinterlegten Bankkonten – unabhängig von der bei der Bestellung gewählten Währung. Dies kann für den Kunden ebenfalls verwirrend sein (siehe Screenshot anbei).

Wäre es möglich, dass dem Kunden in der E-Mail nur das für ihn relevante Bankkonto angezeigt wird?
Idealerweise sollte die Währung als Überschrift erscheinen, während der Kontoinhaber darunter steht, etwa so:

Währung: [EUR/USD/GBP etc.]
Inhaber: PAN Terra GmbH

Bei einer Überweisung an Wise muss der Kontoinhaber zwingend angegeben werden, da die Zahlung sonst nicht zugestellt wird.

Vielen Dank im Voraus für die Unterstützung!

Symptoms:
Der Kunde erhält bei der Bestellbestätigung und Zahlungsaufforderung eine E-Mail mit allen hinterlegten Bankkonten – unabhängig von der bei der Bestellung gewählten Währung. Dies kann für den Kunden verwirrend sein.

Questions:
Wäre es möglich, dass dem Kunden in der E-Mail nur das für ihn relevante Bankkonto angezeigt wird?

April 5, 2025 at 5:33 pm #16900265

Andreas W.
Unterstützer

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Hallo,

Zu den Namen der Bankverbindungen:

Die muss man in dem Fall eigentlich nicht übersetzen. Du kannst die namen direkt in den WooCommerce-Einstellungen anpassen. Wenn hier mehrfach der gleiche Name verwendet wird, dann liegt das daran, dass in WooCommerce mehrfach der gleiche Name verwendet wird.

Du kannst allerdings zur Übersetzung wie folgt vorgehen, falls notwendig:

Gehe auf WPML > Übersetzungsmanagement > Dashboard > Weitere Texte.

Suche nun im Textfeld nach dem Namen der Bankverbidnung. Sie sollte nicht direkt gefunden werden und es wird ein Dialog erscheinen. Im Dialog klicke auf die Option um Texte aus Adminbildschirmen zu übersetzen.

Suche nun im neuen Bildschirm nach dem Namen der Bankverbindung. Er wird in einem Stringnamen wie zum Beispiel [woocommerce_bacs_accounts][0]account_name" erscheinen. Es sollte hier ein Eintrag für jede Bankverbindung vorliegen, die in WooCommerce angegeben wurde.

Markiere die Strings und füge Sie zur String-Übersetzung hinzu. Du solltest sie nun übersetzen können.

Die gleiche vorgehensweise wendest Du für alle Strings an, die im WP-Admin auf den Optionsseiten oder zum Beispiel in E-Mail Templates für WooCommerce verwendet werden.

Sollten sich die Problem damit nicht lösen lassen, dann lass es mich bitte wissen.

---

Um den Kontoinhaber und nur bestimmte Bankverbindungen in der E-Mail anzuzeigen, muss das WooCommerce E-Mail Template angepasst werden. Das ist allerdings eher eine Frage für den WooCommerce Support.

In Bezug auf WCML müsstest Du in dem E-Mail Template vermutlich eine Kondition auf Basis der verwendeten Währung anwenden.

Mögliches Beispiel zur Verwendung im E-Mail Template (Nicht getestet):

<?php if ( $order->get_payment_method() === 'bacs' ) :

    $currency = $order->get_currency();
    $bacs_gateway = WC()->payment_gateways->payment_gateways()['bacs'] ?? null;

    if ( $bacs_gateway && method_exists( $bacs_gateway, 'get_accounts' ) ) {
        $bacs_accounts = $bacs_gateway->get_accounts();

        foreach ( $bacs_accounts as $account ) {

            // Filter by currency — adjust field if needed
            if (
                ( isset( $account['iban'] ) && strpos( $account['iban'], $currency ) !== false ) ||
                ( isset( $account['account_name'] ) && strpos( $account['account_name'], $currency ) !== false )
            ) {
                ?>
                <h2><?php echo esc_html__( 'Bank Details', 'woocommerce' ); ?></h2>
                <p>
                    <strong><?php echo esc_html__( 'Currency', 'woocommerce' ); ?>:</strong> <?php echo esc_html( $currency ); ?><br>
                    <strong><?php echo esc_html__( 'Account Holder', 'woocommerce' ); ?>:</strong> <?php echo esc_html( $account['account_name'] ); ?><br>
                    <strong><?php echo esc_html__( 'IBAN', 'woocommerce' ); ?>:</strong> <?php echo esc_html( $account['iban'] ); ?><br>
                    <strong><?php echo esc_html__( 'BIC', 'woocommerce' ); ?>:</strong> <?php echo esc_html( $account['bic'] ); ?><br>
                </p>
                <?php
            }
        }
    }

endif;
?>

Mit freundlichen Grüßen
Andreas

April 7, 2025 at 3:41 pm #16905250

patrickA-31

Hallo Andreas,

vielen Dank für deinen Hinweis. Ich weiß gar nicht, wie du darauf kommst, dass ich Probleme bei der Übersetzung der Bankkonten habe. Das eigentliche Problem ist eher, dass der Name des Inhabers als Überschrift dargestellt wird, anstatt separat aufgeführt zu sein. Außerdem wird die Währung nicht direkt beim Konto angezeigt.

Ich habe das Thema inzwischen als neues Ticket direkt bei den Kollegen von WooCommerce eröffnet, um das weiter zu klären. Du findest das Ticket hier: https://wordpress.org/support/topic/woocommerce-direct-bank-transfer-display-bank-details-based-on-currency/#new-topic-0

Dort wurde folgendes geantwortet:

"By default, WooCommerce only supports a single active currency at a time, and it doesn’t natively have functionality to conditionally display bank details based on the selected currency. The behavior you’re experiencing — where all bank accounts are shown regardless of the selected currency — is expected in a standard WooCommerce setup, even when using WPML’s Multi-Currency functionality.

To achieve what you’re looking for (showing only the relevant bank based on the selected currency), this would likely require custom development or a compatibility enhancement between WooCommerce and WPML’s currency switcher logic.

You might consider reaching out to WPML support directly, as they may have a recommended solution or snippet for conditionally filtering bank accounts by currency. Alternatively, a custom code solution by a developer would allow you to programmatically hide or display bank accounts depending on the chosen currency at checkout."

Hast du zufällig einen Snippet-Code, den ich auf meiner Webseite einfügen kann, damit die Banküberweisung übersichtlicher dargestellt wird und nur die relevanten Bankdetails abhängig von der gewählten Währung angezeigt werden?

Da ich leider noch Anfänger bin und kein Programmierer, fällt es mir schwer, mit dem Code zu arbeiten. Aber ich schätze deine Unterstützung sehr und hoffe, dass wir eine Lösung finden.

Danke nochmal für deine Hilfe!

Viele Grüße,
Patrick

April 8, 2025 at 3:02 pm #16910136

Andreas W.
Unterstützer

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Das Problem ist, dass wir für diesen speziellen Fall keine Hook verfügbar haben:
https://wpml.org/documentation/related-projects/woocommerce-multilingual/wcml-hooks-reference/#top

Die Hooks, welche sich auf die Währungen beziehen, greifen hier nur im Frontend ein und in Bezug auf Zahlungs-Gateways haben wird in dem Fall ebenfalls keine spezielle Hook verfügbar.

Wie der WooCommerce-Support bereits mitteilte, wäre das eine benutzerdefinierte Anpassung und diese werden von unserem Support leider nicht übernommen.

Support-Richtlinien:
https://wpml.org/de/purchase/support-richtlinie/

Beachte dazu bitte, dass meine Support-Kollegen nicht dazu verpflichtet sind solche benutzerdefinierten Anfrage mit einer Code-Lösung zu beantworten.

Ich könnte alleine empfehlen diesen Code im E-Mail Template auszuprobieren, um die Währungen je Bankverbindung zu filtern:

// Hook into WooCommerce email content and filter bank details based on currency
add_filter('woocommerce_email_order_meta_fields', 'display_bank_details_based_on_currency_wpml', 10, 3);

function display_bank_details_based_on_currency_wpml($fields, $order, $email) {
    // Only apply for BACS (Bank Transfer) method
    if ($order->get_payment_method() === 'bacs') {
        // Get the current active currency using WPML's woocommerce_wpml class
        global $woocommerce_wpml;  // Access WPML instance

        if (!$woocommerce_wpml) {
            return $fields;  // Return if WPML is not active
        }

        // Get the current active currency using WPML's method
        $current_currency = $woocommerce_wpml->get_currency();

        if (empty($current_currency)) {
            return $fields;  // If no currency is set, do not modify the email
        }

        // Get the BACS payment gateway
        $bacs_gateway = WC()->payment_gateways->payment_gateways()['bacs'] ?? null;

        if ($bacs_gateway && method_exists($bacs_gateway, 'get_accounts')) {
            $bacs_accounts = $bacs_gateway->get_accounts();  // Fetch bank account details

            // Loop through the accounts and find the relevant one based on the currency
            foreach ($bacs_accounts as $account) {
                // Check if the currency matches the bank account based on a custom field, e.g., $account['currency']
                if (isset($account['currency']) && $account['currency'] === $current_currency) {
                    // Add the bank account details to the email
                    $fields['bank_details'] = array(
                        'label' => __('Bank Details', 'woocommerce'),
                        'value' => '
                            <h3>' . esc_html__('Currency', 'woocommerce') . ': ' . esc_html($current_currency) . '</h3>
                            <strong>' . esc_html__('Account Holder', 'woocommerce') . ':</strong> ' . esc_html($account['account_name']) . '<br>
                            <strong>' . esc_html__('IBAN', 'woocommerce') . ':</strong> ' . esc_html($account['iban']) . '<br>
                            <strong>' . esc_html__('BIC', 'woocommerce') . ':</strong> ' . esc_html($account['bic']) . '<br>
                        ',
                    );
                    break;  // Exit after the first matching account is found
                }
            }
        }
    }

    return $fields;
}

Hier wird die globale Instanz global $woocommerce_wpml; in welcher die $currency in WCML gespeichert wird.

Ich habe diesen Code nicht gestetstet. Bitte lege zuvor eine Sicherungskopie der Website inkl. Datenbanl an.

April 8, 2025 at 6:15 pm #16910578

patrickA-31

Hallo Andreas,

vielen Dank für deine Nachricht und den Code! Ich habe deinen Code kopiert und als Snippet auf der Webseite buy-butterflies.com eingeführt. Bei einer Testbestellung in CHF wird jedoch nach dem Checkout die folgende Fehlermeldung angezeigt:

„There was an error processing your order. Please check for any charges in your payment method and review your order history before placing the order again.“

Zudem wird keine Bestellbestätigungsmail versendet und auch keine Weiterleitung zur Bestellbestätigungsseite durchgeführt.

Ich weiß, dass es nicht unbedingt in deinem Aufgabenbereich liegt, aber ich wollte dich fragen, ob du eine Idee hast, was wir am Code ändern könnten, damit es funktioniert. Ich denke, andere WPML-Nutzer wären sicherlich auch an einer Lösung interessiert.

Vielen Dank im Voraus für deine Unterstützung!

Beste Grüße,
Patrick

Screenshot 2025-04-08 200759.jpg
April 8, 2025 at 10:58 pm #16911103

Andreas W.
Unterstützer

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Bitte teste einmal folgendes Snippet:

add_filter('woocommerce_email_order_meta_fields', 'display_bank_details_based_on_currency_wpml', 10, 3);

function display_bank_details_based_on_currency_wpml($fields, $order, $email) {
    // Nur für BACS (Banküberweisung) anwenden
    if ($order->get_payment_method() === 'bacs') {
        // WPML Instanz abrufen
        global $woocommerce_wpml;  // Zugriff auf WPML-Instanz

        if (!$woocommerce_wpml) {
            return $fields;  // Rückgabe, falls WPML nicht aktiv
        }

        // Aktuelle Währung über WPML abrufen
        $current_currency = $woocommerce_wpml->get_currency();

        if (empty($current_currency)) {
            return $fields;  // Rückgabe, falls keine Währung gesetzt
        }

        // BACS Zahlungs-Gateway abrufen
        $bacs_gateway = WC()->payment_gateways->payment_gateways()['bacs'] ?? null;

        if ($bacs_gateway && method_exists($bacs_gateway, 'get_accounts')) {
            $bacs_accounts = $bacs_gateway->get_accounts();  // Bankkonto-Daten abrufen

            // Sicherstellen, dass es Bankkonten gibt
            if (!empty($bacs_accounts)) {
                // Konto finden, das zur aktuellen Währung passt
                foreach ($bacs_accounts as $account) {
                    // Überprüfen, ob die Währung mit dem Bankkonto übereinstimmt
                    if (isset($account['currency']) && $account['currency'] === $current_currency) {
                        // Bankdaten zur E-Mail hinzufügen
                        $fields['bank_details'] = array(
                            'label' => __('Bank Details', 'woocommerce'),
                            'value' => '
                                <h3>' . esc_html__('Currency', 'woocommerce') . ': ' . esc_html($current_currency) . '</h3>
                                <strong>' . esc_html__('Account Holder', 'woocommerce') . ':</strong> ' . esc_html($account['account_name']) . '<br>
                                <strong>' . esc_html__('IBAN', 'woocommerce') . ':</strong> ' . esc_html($account['iban']) . '<br>
                                <strong>' . esc_html__('BIC', 'woocommerce') . ':</strong> ' . esc_html($account['bic']) . '<br>
                            ',
                        );
                        break;  // Beenden, nachdem das passende Konto gefunden wurde
                    }
                }
            } else {
                // Optional: Fehlernachricht hinzufügen, wenn keine Bankkonten verfügbar sind
                $fields['bank_details'] = array(
                    'label' => __('Bank Details', 'woocommerce'),
                    'value' => __('No bank account found for the selected currency.', 'woocommerce')
                );
            }
        }
    }

    return $fields;
}

Sollte das nicht funktionieren, dann bin ich aktuell leider auch ratlos und müsste selbst Tests durchführen. Das das aber eher eine benutzerdefinierte Anpassung und kein Bug ist, darf ich hier leider nicht proaktiv werden.

April 9, 2025 at 3:22 pm #16914868

patrickA-31

Hallo Andreas,

leider funktioniert der Code immer noch nicht. Es erscheint weiterhin die gleiche Fehlermeldung wie zuvor beschrieben.

Wäre es eventuell eine einfachere Lösung, wenn wir die Zahlungsart „Banküberweisung (Vorkasse)“ bzw. BACS nur dann erlauben, wenn die Währung EUR ist? In diesem Fall könnten wir alle anderen Währungs-Konten wieder entfernen. Wodurch die gewünschte Übersichtlichkeit wieder gegeben wäre.

Aktuell kann man mit WPML nur die Zahlungsmethode abhängig von der Rechnungs- oder Lieferadresse(?) deaktivieren. Falls jemand zum Beispiel in der Schweiz lieber in Euro statt in CHF bezahlen möchte, sollte es doch möglich sein, dass in diesem Fall die direkte Banküberweisung als Zahlungsmethode angezeigt wird, oder?

Ich hoffe, es nervt nicht zu sehr, mit den vielen Nachfragen. Falls es zu viel Arbeit macht oder keine Standardlösung gibt, nehme ich einfach die folgenden Länder raus:

Vereinigtes Königreich (GBP)

Bulgarien (BGN)

Dänemark (DKK)

Polen (PLN)

Tschechien (CZK)

Rumänien (RON)

Schweden (SEK)

Schweiz (CHF)

Norwegen (NOK)

Ungarn (HUF)

Und akzeptiere nur noch Euro mit der Zahlungsart „Direkte Banküberweisung“.

Ich freue mich auf deine Rückmeldung.

Viele Grüße,
Patrick