FOX - WooCommerce Currency Switcher Professional

WooCommerce Währungsumrechner speichert Einstellungen nicht: max_input_vars

Wenn die Einstellungen Ihres WooCommerce Währungsumrechners nicht gespeichert werden, ist das Muster meist dasselbe: Sie fügen Währungen hinzu oder wählen GeoIP-Länder aus, klicken auf Änderungen speichern (Save changes), die Seite lädt neu, als sei alles gut gegangen – und ein Teil Ihrer Eingaben ist weg. In den meisten Fällen haben weder FOX noch WordPress die Daten verworfen. Das war PHP, noch bevor WordPress die Anfrage überhaupt sah, weil das Einstellungsformular mehr Felder gesendet hat, als das Limit max_input_vars des Servers erlaubt. Im Folgenden erfahren Sie, wie Sie das erkennen, wie Sie das Limit erhöhen und welche selteneren Ursachen infrage kommen, wenn das Limit nicht das Problem ist.

Warum Einstellungen nach dem Speichern verschwinden

Alle Tabs der FOX-Einstellungsseite (WooCommerce → Einstellungen → Währung) bilden ein einziges HTML-Formular. Änderungen speichern (Save changes) sendet alle Tabs in einer einzigen Anfrage, und jedes Eingabefeld darin ist eine eigene Variable:

  • Jede Währungszeile im Tab Währungen (Currencies) sendet etwa ein Dutzend Felder: Code, Kurs, Aufschlag, Kursuntergrenze und -obergrenze, Symbol, Position, Dezimalstellen, Trennzeichen, Beschreibung, Flagge und die Markierung der Basiswährung;
  • jedes ausgewählte Land in den GeoIP-Regeln (GeoIP rules) ist ein eigenes Feld, sodass Alle auswählen (Select all) für eine Währung auf einen Schlag etwa 250 Felder hinzufügt;
  • jede für ein Zahlungs-Gateway ausgewählte Währung im Tab Zahlungen (Payments) ist ein weiteres Feld;
  • die Tabs Optionen (Options), Erweitert (Advanced) und Seitlich (Side) bringen ihre eigenen Einstellungen noch dazu.

Die PHP-Einstellung max_input_vars begrenzt, wie viele davon eine Anfrage enthalten darf; der Standardwert ist 1000. Sendet ein Formular mehr, behält PHP die ersten 1000 und verwirft den Rest stillschweigend. FOX speichert dann, was angekommen ist, und die meisten nicht angekommenen Felder werden leer oder deaktiviert gespeichert, statt unverändert zu bleiben. Kommt keines der GeoIP-Felder an, werden die GeoIP-Regeln gelöscht.

Das Formular wird in der Reihenfolge der Seite gesendet: Währungen (Currencies), Optionen (Options), Erweitert (Advanced), Seitlich (Side), Zahlungen (Payments), dann GeoIP. Abgeschnitten wird zuerst das Ende des Formulars, und je mehr Felder es gibt, desto weiter nach oben wandert der Schnitt. Daraus ergeben sich die typischen Symptome, von den häufigsten an:

  • GeoIP-Länder bleiben für die ersten Währungen erhalten und gehen für die dritte oder vierte verloren;
  • Auswahlen bei den Zahlungsregeln (Payments rules) gehen verloren;
  • Optionen in den Tabs Seitlich (Side) und Erweitert (Advanced) schalten sich von selbst aus: Mehrfach erlaubt (Is multiple allowed) springt zurück auf Nein (No), oder der Tab Zahlungen (Payments) erscheint nie, nachdem Sie Zahlungsregeln (Payments rules) eingeschaltet haben, weil er nur angezeigt wird, wenn die Option tatsächlich gespeichert wurde;
  • ab etwa 70 Währungen reicht der Schnitt bis in die Währungstabelle selbst: Die letzten Zeilen verschwinden oder verlieren ihre Flaggen, Symbole und Beschreibungen.

Das Limit auf Ihrem Server prüfen

Öffnen Sie WooCommerce → Status. Im Abschnitt Serverumgebung (Server environment) zeigt Max. PHP-Eingabevariablen (PHP max input vars) den aktuellen Wert. Vergleichen Sie ihn mit einer groben Zählung Ihres Formulars: Währungen × 13, plus jedes ausgewählte GeoIP-Land, plus jede in den Zahlungsregeln ausgewählte Währung, plus etwa 100 für alles andere. Zehn Währungen sind nur etwa 130 Felder, aber vier davon mit Alle auswählen (Select all) in den GeoIP-Regeln fügen rund 1000 weitere hinzu, und das Formular überschreitet das Standardlimit mitten im GeoIP-Tab.

Zwei weitere Möglichkeiten zur Bestätigung:

  • Das PHP-Fehlerprotokoll enthält, sofern die Protokollierung aktiv ist, eine Warnung wie Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini., geschrieben genau in dem Moment, in dem Sie gespeichert haben.
  • Der gespeicherte Wert weicht von Ihrer Auswahl ab. Mit WP-CLI gibt wp option get woocs_is_multiple_allowed bei Ja (Yes) den Wert 1 aus; steht dort nach dem Speichern von Ja (Yes) eine 0, wurde das Feld abgeschnitten.

max_input_vars erhöhen

Die Einstellung gehört zur PHP-Konfiguration der Website und wird deshalb je nach Hosting an einer dieser Stellen geändert:

  • Control Panel des Hostings. Die meisten Panels haben eine Seite „PHP-Einstellungen“ oder „PHP-INI-Editor“, in deren Liste max_input_vars steht. Das ist der sicherste Weg.
  • php.ini oder .user.ini im Stammverzeichnis der Website, sofern der Hoster das erlaubt:
    ; PHP configuration (php.ini or .user.ini in the site root)
    max_input_vars = 5000
    Eine .user.ini-Datei wird standardmäßig nur alle paar Minuten neu eingelesen; warten Sie also, bevor Sie testen.
  • .htaccess, nur wenn PHP als Apache-Modul läuft:
    # .htaccess in the site root, at the bottom
    php_value max_input_vars 5000
    Antwortet die Website danach mit einem 500-Fehler, läuft PHP als FastCGI oder PHP-FPM, was php_value nicht akzeptiert. Entfernen Sie die Zeile und nutzen Sie das Panel oder .user.ini.
  • PHP-FPM-Pool auf Ihrem eigenen Server: php_admin_value[max_input_vars] = 5000 in der Pool-Konfiguration, danach PHP-FPM neu starten.

ini_set('max_input_vars', ...) in der wp-config.php oder in einem Plugin funktioniert nicht. PHP liest das gesendete Formular, bevor irgendein WordPress-Code läuft, und diese Direktive lässt sich zur Laufzeit nicht ändern.

5000 genügt für die meisten Shops. Verwenden mehrere Währungen Alle auswählen (Select all) in den GeoIP-Regeln oder hat der Shop mehr als 200 Währungen, setzen Sie 10000 oder mehr; das Limit schützt den Server lediglich vor ungewöhnlich großen Anfragen, und ein höherer Wert kostet im normalen Betrieb nichts. Anschließend:

  1. laden Sie WooCommerce → Status neu und prüfen Sie, ob Max. PHP-Eingabevariablen (PHP max input vars) den neuen Wert anzeigt;
  2. öffnen Sie die FOX-Einstellungen und geben Sie das Verlorene erneut ein: Die abgeschnittenen Felder wurden leer gespeichert und kommen deshalb nicht von selbst zurück;
  3. speichern Sie, laden Sie die Seite neu und prüfen Sie die GeoIP-Regeln der letzten Währung sowie den Tab Erweitert (Advanced).

Weitere Gründe, warum eine Einstellung nicht hält

Währungen, die nach dem Entfernen zurückkehren

FOX benötigt mindestens zwei Währungen. Sind weniger als zwei gespeichert, greift es auf sein Standardpaar zurück (USD plus EUR oder USD plus Ihre WooCommerce-Währung), sodass das Löschen einer Zeile eine soeben entfernte Währung zurückbringen kann. Um eine Währung zu ersetzen, geben Sie den neuen Code in die vorhandene Zeile ein, klicken Sie auf die Aktualisieren-Schaltfläche neben ihrem Kurs, passen Sie das Symbol an und speichern Sie.

Tun Sie das in einer Zeile, die nicht als Basiswährung markiert ist. Beim Speichern schreibt FOX den Code der Basiszeile in die eigene Währungseinstellung von WooCommerce; ändern Sie diesen Code, ändert sich also die Währung des gesamten Shops, während die Produktpreise die Zahlen bleiben, die sie waren.

Die Schaltfläche „Währung anhängen“ zeigt eine Meldung statt einer neuen Zeile

Diese Meldung stammt aus der kostenlosen Version von FOX, die auf zwei Währungen beschränkt ist. Es ist kein Speicherproblem; lesen Sie dazu FOX von der kostenlosen auf die Vollversion upgraden.

Teile der Seite mit eigenen Speicherschaltflächen

  • Designer. Designs des Umschalters werden mit den Schaltflächen Änderungen speichern (Save changes) und Speichern und beenden (Save and exit) im Designer-Panel gespeichert. Die Hauptschaltfläche Änderungen speichern (Save changes) unten auf der Seite speichert sie nicht.
  • GeoIP-Profile. Neues Profil hinzufügen (Add new profile) und Profil aktualisieren (Update profile) speichern ein Profil sofort. Hinzufügen zu: (Add to:) kopiert lediglich seine Länder in die Regeln einer Währung auf der Seite; die Regeln werden über das Haupt-Änderungen speichern (Save changes) gespeichert, und es gilt dasselbe Feldlimit.

Fehler 403 beim Speichern

Eine 403-Seite statt der neu geladenen Einstellungen stammt von einer Sicherheitsregel des Servers, meist mod_security, der Größe oder Inhalt der Anfrage nicht gefallen. Lesen Sie dazu Fehler 403 beim Speichern der Plugin-Einstellungen.

Die Einstellungsseite ist leer, lädt endlos oder ihre Schaltflächen reagieren nicht

Die Tabs, Auswahllisten und Schaltflächen der Einstellungsseite werden per JavaScript gesteuert. Reagieren Währung anhängen (Append Currency), Alle Kurse aktualisieren (Update all rates) oder die Tabs nicht, öffnen Sie auf der Einstellungsseite die Browser-Konsole (F12, Tab Konsole (Console)) und klicken Sie die Schaltfläche erneut an. Ein Fehler aus dem Admin-Skript eines anderen Plugins stoppt die FOX-Skripte auf derselben Seite. Die im Fehler genannte Datei zeigt, um welches Plugin es sich handelt; zur Bestätigung deaktivieren Sie auf einer Staging-Kopie alles außer WooCommerce und FOX und testen erneut.

  • Ein Tab ist leer, obwohl die Seite geladen wurde: Ein Stylesheet eines Admin-Themes oder eines Plugins zur Admin-Anpassung blendet den Inhalt aus. Testen Sie mit deaktiviertem Plugin.
  • Die Seite hängt, nachdem die Option Statistik (Statistic) aktiviert wurde. Setzen Sie Statistik (Statistic) im Tab Erweitert (Advanced) auf Nein (No). Lässt sich die Seite gar nicht mehr öffnen, führen Sie mit WP-CLI wp option update woocs_collect_statistic 0 aus.
  • Das Speichern endet mit einem Timeout oder einem 500-Fehler. Das PHP-Fehlerprotokoll nennt die Datei, in der es fehlgeschlagen ist.

Als letzte Möglichkeit lassen sich die FOX-Optionen auf ihre Standardwerte zurücksetzen, indem Sie die Option woocs_first_activation auf 0 setzen (wp option update woocs_first_activation 0 mit WP-CLI oder in der Tabelle wp_options) und danach eine beliebige Seite der Website einmal aufrufen. Dadurch werden alle Optionen zurückgesetzt (Mehrfach erlaubt (Is multiple allowed) geht zum Beispiel zurück auf Ja (Yes)), die GeoIP-Regeln und die Zahlungsregeln gelöscht, die Währungsliste bleibt erhalten. Erstellen Sie zuerst ein Datenbank-Backup und notieren Sie sich Ihre Einstellungen.

Checkliste

  • Max. PHP-Eingabevariablen (PHP max input vars) in WooCommerce → Status beträgt 5000 oder mehr (10000 bei großen GeoIP-Länderlisten).
  • Verlorene Daten erneut eingegeben und nach der Erhöhung des Limits noch einmal gespeichert.
  • Währungen durch Bearbeiten einer Zeile ersetzt, nicht durch Löschen, und die Basiszeile unangetastet gelassen.
  • Designs und GeoIP-Profile mit ihren eigenen Schaltflächen gespeichert.
  • Keine Fehler in der Browser-Konsole auf der Einstellungsseite.

Halten die Einstellungen trotz hohem Limit und sauberer Konsole weiterhin nicht, eröffnen Sie im FOX-Support-Forum ein Thema mit der Anzahl der Währungen, dem Wert von Max. PHP-Eingabevariablen (PHP max input vars) und der Einstellung, die nicht gespeichert wird, und wir sehen es uns an.