WordPress: Benutzerdefinierte Menüs werden beim Speichern zerstört – Die Lösung!
Ich nutze WordPress seit vielen Jahren, längst nicht mehr nur als reines Blogsystem. Inzwischen hat sich sich zu einem ausgewachsenen Content Management System entwickelt und so läuft auch meine Hauptwebsite foto-huwi.ch mit WordPress. Doch manchmal kommt man in Situationen, da rauft man sich die Haare, sucht nach den Ursachen eines blöden Fehlverhaltens und findet auch nach Stunden intensiver Forschungsarbeit nicht mal den geringsten Ansatz einer Lösung.
So ging es mir dieser Tag und da ich überzeugt bin, dass auch andere damit kämpfen, möchte ich das Problem und die Lösung hier festhalten.
Das Problem
Unter Design > Menüs kann man die Menüstruktur bequem mittels Drag’n’drop zusammenstellen, Änderungen vornehmen und Menüpunkte ein- und ausblenden. Doch irgendwann ändert man nur was kleines und erschrickt: Plötzlich fehlen 10, 20 oder mehr Menüeinträge. Versucht man diese Einträge wieder hinzuzufügen, gelingt das zwar im Menüeditor, aber nach dem Speichern sind sie wieder weg. Es hilft nur noch das Zurückladen eines Backups, den selbst das komplett neu Anlegen des Menüs führt nicht zur Lösung.
Die Ursache
WordPress speichert die Inhalte in einem grossen Array, einem Feld verschiedener Werte. Diese werden über die PHP-Umgebungsvariable $_POST an WordPress zurückgegeben. Beim Speichern des Menüs werden die Werte zwar ordentlich übergeben, beim für die Entgegennahme verantwortlichen Skript (in diesem Falle war es wp-nav.php) kommt jedoch nur ein Teil dieser Werte an. Und genau hier, liegt der Hund begraben! PHP unterschlägt gewissermassen einen Teil der Daten, was zum Verlust der Menüeinträge führt.
Die Lösung
In der Konfigurationsdatei php.ini – bei vielen Hostern hat man die Möglichkeit, eine eigene php.ini Datei zu nutzen – wurde die Anzahl der akzeptierten Werte limitiert. Dies erfolgt mit dem Parameter max_input_vars. In meinem Fall war dieser Wert auf den Defaultwert von 1000 gesetzt, was zu einer maximalen Anzahl von ca. 45 Menüeinträgen führte. Nachdem ich in der php.ini den Wert auf max_input_vars=3000 erhöht hatte, lief alles wieder wie erwartet… und ich denke, dass ich die Limite so schnell auch nicht erreichen werde.
Noch mehr zur Vertiefung?
Gerne doch… ich durchforstete Dutzende Websites, Foren und FAQs, doch wirkliche Hilfe fand ich seeeehr lange keine. Es gab zwar einige Einträge die sich um ein PHP-Modul namens suhosin handelten, welches offenbar früher auch mal Probleme gemacht hatte, doch die wirkliche Lösung entdeckte ich erst nach vielen vielen Stunden. Daher möchte ich Chris Mavricos für seinen hilfreichen Artikel «The WordPress Menu Item Limit or: Help! Half my menu items just disappeared!» danken… er war es, der mir zur lange gesuchten Lösung verhalf.
Vielen Dank, ich habe gerade 5 Stunden lang gesucht und dank deiner Erklärung die Lösung gefunden. Nachdem der Provider max_input_vars von 1000 auf 3000 gesetzt hat, funktioniert alles wieder. Glücklicherweise hatte ich ein Backup der Datenbank – nach dem Einspielen sind auch die Menüeinträge wieder da.