Einige WordPress User fallen dem relativ unbekannten Menu Item Limit zum Opfer. Sie ändern ihr Menü, speichern und nix passiert. Woran das liegt und was man tun kann…
Wenn du in WordPress ein Menü mit vielen Einträgen erstellst und feststellst, dass nach dem Speichern einige Menüeinträge verschwinden oder nicht hinzugefügt werden können, liegt das oft an einer serverseitigen Beschränkung der maximal zulässigen POST-Variablen. Diese Begrenzung kann dazu führen, dass bei umfangreichen Menüs nicht alle Daten korrekt übertragen werden, wodurch WordPress fehlende Menüeinträge löscht.
Inhaltsverzeichnis:
Was wird das Speichern der Menü-Einträge blockiert?
Jeder Menüeintrag in WordPress enthält etwa 11–12 Felder (z. B. Titel, Klassen, Beschreibung). Bei vielen Menüeinträgen summiert sich die Anzahl der POST-Variablen schnell auf mehrere Hundert oder Tausend. PHP begrenzt standardmäßig die Anzahl der Eingabevariablen, um Sicherheitsrisiken wie DoS-Angriffe zu minimieren. Der Default der PHP der dafür zuständigen Einstellung max_input_vars besagt, dass max. 1000 Variablen verarbeitet werden. Wenn diese Grenze überschritten wird, werden zusätzliche Variablen ignoriert, und WordPress erhält unvollständige Daten. Bei bestimmten Menügrößen kann das schon mal überschritten werden, so dass dieses Limit erhöht werden muss.
Wie erkenne ich, ob das Menu Item Limit schuld ist?
Um herauszufinden, ob die max. Anzahl an zu verarbeitenden Variablen in PHP schuld daran ist, dass die neuesten Menüpunkte nicht gespeichert werden, muss man den Debug Mode hochsetzen. Hierzu öffnet man die wp-config.php und ändert den WP_DEBUG Wert auf:
define('WP_DEBUG', true);
Anschließend erhält man z.B. folgende Nachricht:
PHP Warning: Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini. in Unknown on line 0, referer: https://www.seite.de/wp-admin/nav-menus.php
Wie erhöhe ich die in PHP zu verarbeitenden Variablen?
Man erhöht die max_input_vars ganz bequem über die .htaccess-Datei im root der WordPress-Installation. Hierzu folgende Zeile einfügen (der Wert ist natürlich individuell zu setzen, bei mir haben 2000 gereicht):
php_value max_input_vars 2000
Alternativ kann diese Einstellung auch über eine php.ini oder user.ini vorgenommen werden, wenn der Hoster diese Möglichkeit bietet:
max_input_vars = 3000
Hinweis: Wenn du keinen Zugriff auf die php.ini-Datei hast, wende dich an deinen Hosting-Anbieter oder Administrator, um diese Einstellung anzupassen.
Durch das Erhöhen von max_input_vars stellst du sicher, dass alle Menüeinträge korrekt verarbeitet werden und keine Datenverluste auftreten. Denke daran, dass auch andere PHP-Einstellungen wie post_max_size und suhosin.post.max_vars (falls Suhosin verwendet wird) die Anzahl der verarbeiteten Eingabevariablen beeinflussen können. Überprüfe daher diese Einstellungen ebenfalls und passe sie bei Bedarf an.
Internal Server Error nach Änderung
Änderung der max_input_vars in der php.ini führt zu Internal Server Error 500
Ein Internal Server Error nach dem Ändern von max_input_vars kann an Syntaxfehlern in der php.ini, einem zu hohen oder ungültigen Wert, oder daran liegen, dass die Änderungen an der falschen php.ini-Datei vorgenommen wurden, liegen. Überprüfe die Syntax sorgfältig und stelle sicher, dass du moderate Werte wie 2000 oder 3000 verwendest. Teste, ob die richtige php.ini bearbeitet wurde, indem du in einer PHP-Datei phpinfo(); ausführst, und passe gegebenenfalls die korrekte Datei an. Falls Änderungen nicht möglich sind, nutze alternativ die .htaccess-Datei oder kontaktiere deinen Hoster für Unterstützung.
Änderung der max_input_vars in der .htaccess-Datei führt zu Internal Server Error 500
Es kann sein, dass der Hoster Änderungen an max_input_vars über die .htaccess oder andere Konfigurationsmethoden wie die php.ini oder die user.ini nicht zulässt. Einige Hosting-Anbieter sperren bestimmte Einstellungen aus Sicherheits- oder Performance-Gründen und überschreiben Änderungen mit globalen Servereinstellungen. In solchen Fällen kannst du nur folgende Optionen prüfen:
- Hosting-Support kontaktieren: Bitte den Support, die Einstellung für dich zu erhöhen. Oft sind sie bereit, dies anzupassen, wenn du dein Anliegen erklärst.
- Hosting-Anbieter wechseln: Wenn dein Hoster dich zu stark einschränkt und keine Lösung bietet, ist ein Anbieterwechsel oft die beste langfristige Option. Ein Wechsel zu einem Entwickler-freundlicheren Hosting-Provider kann dir bei wiederkehrenden Einschränkungen viel Ärger ersparen.
Fazit
Das Menu Item Limit ist kein WP Problem, sondern eine Voreinstellung von PHP, die WP zum Verhängnis wird. Mit der beschriebenen Lösung kann man das Problem ganz einfach lösen. Hinweis: Die oben genannte Lösung geht leider nicht bei jedem Webhoster. Sollte also ein Internal Server Error anschließend auftreten, lässt der Webhoster das Ändern über die .htaccess Direktive leider nicht zu.
ago
ich habe inzwischen alles getestet und dennooch wird das Menü nicht mehr gepeichert
> Inzwischen habe ich halle genannten Angaben getestet!
> Sind auch alle in der User.ini eingetragen ‚WP_DEBUG‘, true ist auch
> aktiv es werden keine Fehler angezeigt!
>
>
> max_input_vars = 10000
> max_execution_time = 120
> suhosin.post.max_vars = 5000
> suhosin.request.max_vars = 5000
Wstrubbi
Wir haben auf unserer Webseite lediglich 27 Menüpunkte – stehe aber trotzdem vor dem Problem, dass ich keine weiteren Kategorien in das Menü einfügen kann.
Ich habe den Wert max_input_vars auf 3000 (und versuchsweise auf 10000) gesetzt, was leider nicht geholfen hat.
Ich konnte auch nicht die .htaccess anpassen, sondern musste dies in einer .user.ini angeben. Dadurch wird der PHP Local Value entsprechend gesetzt. Der PHP Master Value verbleibt allerdings auf 1000.
Die suhosin Variablen werden durch meine info.php nicht ausgegeben. Somit kann ich diese Einstellungen nicht überprüfen.
Wer hat eine Idee wie ich das lösen kann?
Carsten Bornhöft
Bei mir mit PHP 5.4 mit Plesk ging das mit diesem Eintrag in den Plesk PHP Einstellungen
max_input_vars = 3000 suhosin.post.max_vars = 3000 suhosin.request.max_vars = 3000
bernd
Hey, also Ich öffne den FTP Server und danach die wp-config.php. In diese setze ich dann den Code ein. Danach abspeichern und gegen das alte austauschen. Die Frage ist anschließend: Wo wird die Fehlermeldung danach angezeigt?
Wurde bei mir nirgends angezeigt.. Vielen Dank schon mal 🙂
Dominique
Reicht allein der Befehl „php_value max_input_vars 2000“ in der htaccess? oder muss noch mehr angegeben werden?
René Dasbeck Post author
Das reicht.
Adem Oezen
Danke, echt super. Hat Wunderbar geklappt 🙂
Silvi
Super danke für den Tipp ich war schon am verzweifeln!!!!