FOX - WooCommerce Currency Switcher Professional

WooCommerce Subscriptions Multi-Currency: Gebühren, Testphasen, Verlängerungen

Ein Setup für WooCommerce Subscriptions mit mehreren Währungen hat mehr bewegliche Teile als ein normaler Shop: die Preiszeichenfolge auf der Produktseite, die Anmeldegebühr, die kostenlose Testphase, die erste Zahlung und Verlängerungen, die Monate später stattfinden, ohne dass der Kunde auf der Website ist. FOX enthält seit Version 2.4.3 eine eingebaute Kompatibilitätsschicht für WooCommerce Subscriptions, die sich mit einem einzigen Filter einschalten lässt. Im Folgenden: die Entscheidung, die Sie zuerst treffen müssen, was die Kompatibilität bewirkt, wie Anmeldegebühren, Testphasen und feste Preise zusammenspielen, und die Lösungen für Verlängerungen, Tarifwechsel und doppelte „/ Monat“-Texte.

Zuerst entscheiden: In welcher Währung zahlen Abonnenten?

Mehrfach erlaubt (Is multiple allowed) im Tab Erweitert (Advanced) unter WooCommerce → Einstellungen → Währung (WooCommerce → Settings → Currency) entscheidet darüber:

  • Nein (No): Besucher sehen umgerechnete Preise, aber jede Bestellung wird in der Basiswährung aufgegeben. Das Abonnement und alle seine Verlängerungen laufen in der Basiswährung, WooCommerce Subscriptions braucht also nichts Besonderes. Die Vor- und Nachteile dieses Modus stehen unter Preise in lokaler Währung anzeigen, in Basiswährung abrechnen.
  • Ja (Yes): Der Kunde zahlt in der gewählten Währung, und das Abonnement wird in dieser Währung angelegt. Seine Verlängerungen müssen dann in derselben Währung abgerechnet werden, wofür die unten beschriebene Kompatibilität sorgt. Jedes angebotene Zahlungs-Gateway muss jede Währung abrechnen können, im Checkout und bei automatischen Verlängerungen; lesen Sie dazu Zahlungs-Gateway unterstützt die Währung nicht.

Die Kompatibilität mit WooCommerce Subscriptions einschalten

Die Kompatibilität ist standardmäßig ausgeschaltet. Schalten Sie sie mit dem Filter woocs_init_compatibility_woo_subscriptions ein:

/*
 * FOX: switch on the built-in WooCommerce Subscriptions compatibility.
 * Child theme functions.php or a code snippets plugin.
 */
add_filter( 'woocs_init_compatibility_woo_subscriptions', '__return_true' );

FOX liest den Filter, wenn WordPress initialisiert wird; er muss also in der functions.php oder in einem Snippet stehen, das bei jeder Anfrage läuft, und nicht in einem späteren Hook. Er wird nur geladen, wenn WooCommerce Subscriptions aktiv ist. Was er ändert:

  • Preiszeichenfolgen bestehender Abonnements (Mein Konto, E-Mails) werden in der eigenen Währung des Abonnements angezeigt. FOX wechselt für die Anzeige in diese Währung, sodass ein Kunde, der seine Abonnements öffnet, in dieser Währung weiterstöbert.
  • Verlängerungsbestellungen werden in der Währung des Abonnements erstellt, nicht in der Währung, die FOX gerade hat, wenn die geplante Verlängerung läuft.
  • Zeichenfolgen auf der Produktseite: Die Anmeldegebühr im Preistext wird zum aktuellen Kurs umgerechnet (ohne die Kompatibilität zeigt sie den Basisbetrag mit dem Währungssymbol des Besuchers an, obwohl der Warenkorb den richtigen abrechnet), und der „Ab“-Preis variabler Abonnements wird von der günstigsten Variation in der Währung des Besuchers übernommen.
  • Über den Warenkorb bezahlte Verlängerungen: Der in der Währung des Abonnements gespeicherte Betrag wird in die Basiswährung zurückgerechnet, bevor FOX ihn erneut umrechnet, und somit nicht doppelt umgerechnet.

Die Seite zur Kompatibilität mit WooCommerce Subscriptions beschreibt eine ältere Methode, die Dateien innerhalb von WooCommerce Subscriptions bearbeitet. Verwenden Sie eine Methode, nicht beide: Wurden diese Änderungen vorgenommen, installieren Sie eine saubere Kopie von WooCommerce Subscriptions neu, bevor Sie den Filter einschalten.

Anmeldegebühren, kostenlose Testphasen und feste Preise

WooCommerce Subscriptions berechnet die erste Zahlung, indem es den Produktpreis ändert: Es addiert die Anmeldegebühr zum Preis oder verwendet während einer kostenlosen Testphase die Gebühr allein. FOX rechnet diesen Betrag anschließend um. Was dann passiert, hängt davon ab, ob das Produkt einen festen Preis in der Währung des Besuchers hat.

ProduktOhne feste PreiseMit festem Preis in der Währung
Wiederkehrender Preiszum Kurs umgerechnetder feste Preis
Anmeldegebühr, keine TestphasePreis plus Gebühr, gemeinsam umgerechnetdie erste Zahlung ist der feste Preis; die Gebühr entfällt
Kostenlose Testphase, keine Gebührheute nichts zu zahlenheute nichts zu zahlen
Kostenlose Testphase mit Anmeldegebührdie Gebühr, umgerechnetstatt der Gebühr wird der feste wiederkehrende Preis berechnet

Der Grund liegt in der Funktionsweise fester Preise: FOX ersetzt den Betrag, den es erhält, durch den festen Preis, und der Betrag, den Subscriptions für die erste Zahlung sendet, ist nicht mehr der reine Produktpreis. Zudem gibt es kein Festpreisfeld für die Anmeldegebühr selbst. Lassen Sie daher bei Abonnementprodukten mit Anmeldegebühr die Felder für feste Preise leer und überlassen Sie Preis und Gebühr gemeinsam der Umrechnung per Kurs – oder streichen Sie die Gebühr. Feste Preise bei Abonnements ohne Gebühr verhalten sich wie bei jedem anderen Produkt; die Regeln stehen unter WooCommerce: Fester Preis pro Währung.

Umgerechnete Beträge lassen sich mit den üblichen FOX-Filtern runden; lesen Sie Umgerechnete Preise runden. Das Runden des wiederkehrenden Preises rundet auch die Summe aus Preis und Gebühr bei der ersten Zahlung, nicht die beiden Teile einzeln.

Verlängerungen und fehlgeschlagene Zahlungen

WooCommerce Subscriptions erstellt jede Verlängerungsbestellung aus den im Abonnement gespeicherten Beträgen, in der Währung des Abonnements. Eine spätere Änderung des Wechselkurses oder eines festen Preises ändert bestehende Abonnements nicht; sie gilt für neue. Ist die Kompatibilität eingeschaltet, hält FOX die Verlängerung in der Währung des Abonnements, und das Gateway belastet diese Bestellung so, wie sie ist.

  • Automatische Verlängerungen und Wiederholungsversuche belasten die bereits vorhandene Verlängerungsbestellung, sodass sich Betrag und Währung zwischen den Versuchen nicht ändern.
  • Manuelle Verlängerungen und die Zahlung einer fehlgeschlagenen Verlängerung laufen über den Warenkorb. Dort kann ein Betrag, der bereits in der Währung des Abonnements vorliegt, ein zweites Mal umgerechnet werden, wenn die Kompatibilität ausgeschaltet ist oder ein anderes Plugin die Verlängerungspreise ebenfalls anpasst. Eine Verlängerung von 113,99 Dollar, die an der Kasse etwa 135 verlangt – der Betrag, noch einmal mit dem Kurs von Euro zu Dollar multipliziert –, ist dieser Fall.
  • Währungswechsel: Ein Abonnement behält die Währung, in der es gekauft wurde. Ein Kunde, der eine andere Währung möchte, braucht ein neues Abonnement.

Testen Sie diese Abläufe auf einer Staging-Kopie, bevor Sie sich darauf verlassen, und zwar nur mit aktivem WooCommerce, WooCommerce Subscriptions, FOX und Ihrem Gateway: ein neues Abonnement in einer zweiten Währung, eine automatische Verlängerung (Verlängerung verarbeiten (Process renewal) in den Aktionen des Abonnements), eine manuelle Verlängerung und die Zahlung einer fehlgeschlagenen Verlängerung. Vergleichen Sie die Bestellsummen mit dem Abonnement.

Upgrades, Downgrades und Beträge im Admin-Bereich

Wechselt ein Kunde zu einem anderen Tarif, berechnet WooCommerce Subscriptions anteilig: Es vergleicht, was für den laufenden Zeitraum gezahlt wurde, mit dem Preis des neuen Tarifs. Der gezahlte Betrag ist in der Währung des Abonnements gespeichert, während die Berechnung die Basiswährung erwartet, sodass einem Kunden, der 524 PLN gezahlt hat, so viel gutgeschrieben werden kann, als hätte er 524 EUR gezahlt. Ein verwandtes Symptom zeigt sich im Admin-Bereich: Beträge von Abonnements in einer anderen Währung werden mit dem Symbol der Basiswährung angezeigt, weil FOX für jeden Betrag das Symbol seiner aktuellen Währung zurückgibt. Zwei Filter beheben beides:

/*
 * FOX + WooCommerce Subscriptions: correct symbols for amounts in other
 * currencies, and base-currency amounts for plan switch proration.
 * Child theme functions.php or a code snippets plugin.
 */
add_filter( 'woocommerce_currency_symbol', function ( $symbol, $currency ) {
    global $WOOCS;
    if ( empty( $currency ) || ! isset( $WOOCS ) ) {
        return $symbol;
    }
    $currencies = $WOOCS->get_currencies();
    // An amount in a specific currency gets that currency's symbol.
    if ( $currency !== $WOOCS->current_currency && isset( $currencies[ $currency ]['symbol'] ) ) {
        return $currencies[ $currency ]['symbol'];
    }
    return $symbol;
}, 10000, 2 ); // after FOX, which uses priority 9999

add_filter( 'wcs_switch_total_paid_for_current_period', function ( $total_paid, $subscription ) {
    global $WOOCS;
    if ( ! isset( $WOOCS ) || ! $WOOCS->is_multiple_allowed ) {
        return $total_paid;
    }
    $currency   = $subscription->get_currency();
    $currencies = $WOOCS->get_currencies();
    if ( $currency === $WOOCS->default_currency || empty( $currencies[ $currency ]['rate'] ) ) {
        return $total_paid;
    }
    // Amount paid in the subscription currency, back to the base currency.
    return $total_paid / $currencies[ $currency ]['rate'];
}, 10, 2 );

Der zweite Filter verwendet den heutigen Kurs, nicht den der ursprünglichen Zahlung, sodass eine Gutschrift bei Kursänderungen leicht vom gezahlten Betrag abweichen kann. Ändern Sie beim Testen der anteiligen Berechnung die Abonnementdaten nicht von Hand: Das Startdatum lässt sich nicht bearbeiten, und die Berechnung liefert dann irreführende Ergebnisse.

Ein doppeltes „/ Monat“ hinter dem Preis

Bei manchen Themes erscheint der Zeitraumtext doppelt, zum Beispiel 9,99 / Monat / Monat. Am häufigsten passiert das bei eingeschalteter Option Ich verwende ein Cache-Plugin auf meiner Website (I am using cache plugin on my site): FOX zeichnet den Preis nach dem Laden der Seite neu, das neue Preis-HTML vom Server enthält den Zeitraumtext bereits, und der Zeitraumtext der gecachten Seite bleibt daneben stehen. Blenden Sie die zweite Kopie mit CSS aus (Design → Anpassen → Zusätzliches CSS):

/* WooCommerce Subscriptions: hide the repeated period text */
.price .subscription-details:nth-child(2) {
    display: none;
}

Fügen Sie es nur hinzu, wenn der Text tatsächlich doppelt erscheint, und leeren Sie danach den Cache. Verwendet ein Theme ein anderes Preis-Template, untersuchen Sie die beiden Elemente im Browser und passen Sie den Selektor an. Warum das Neuzeichnen überhaupt stattfindet, erklärt Währungsumschalter springt auf die Standardwährung zurück.

Andere Abonnement-Plugins und ein abschließender Test

Die eingebaute Kompatibilität deckt nur WooCommerce Subscriptions ab. Andere Abonnement-Plugins berechnen wiederkehrende Summen, Gebühren und Testphasen in ihrem eigenen Code; diese Seiten beschreiben die Anpassungen, die wir kennen:

Prüfen Sie bei jedem Abonnement-Plugin vor dem Livegang Folgendes:

  • Produktseite, Warenkorb und Checkout zeigen in einer zweiten Währung dieselbe erste Zahlung und denselben wiederkehrenden Gesamtbetrag.
  • Anmeldegebühr und Testphase verhalten sich in jeder Währung gleich.
  • Das Abonnement und seine erste Verlängerungsbestellung haben die Währung, in der der Kunde gezahlt hat, und das Gateway hat die Verlängerung in dieser Währung belastet.
  • Eine manuelle Verlängerung und die Zahlung einer fehlgeschlagenen Verlängerung verlangen denselben Betrag wie das Abonnement.
  • Eine Warenkorbsumme, die in einer zweiten Währung viel zu hoch ist, deutet auf eine doppelte Umrechnung hin: Lesen Sie Doppelte Währungsumrechnung im Warenkorb.

Stimmen die Beträge weiterhin nicht überein, eröffnen Sie im FOX-Support-Forum ein Thema mit Ihrem Abonnement-Plugin samt Version, den Produkteinstellungen sowie den erwarteten und den tatsächlichen Beträgen, und wir sehen es uns an.