Mehr oder weniger zufällig haben wir gestern nach einem Update auf Version 3.0.4 einen „Bug“ im WordPress-Backend gefunden, durch den kein Umschalten des WYSIWYG-Editors zwischen „Visuell“ und „HTML“ mehr möglich war. Da die Eingrenzung des Fehlers doch etwas gedauert hat, poste ich das hier, für den Fall, dass es sonst noch jemandem weiterhilft.
Interessant daran: Scheinbar hatte sich WordPress per Cookie / Einstellung zuvor gemerkt, welchen Modus ein Benutzer beim Schreiben / Editieren zuletzt aktiviert hatte, denn entdeckt wurde der Fehler dadurch, dass bei einem Benutzer scheinbar der Editor nicht mehr funktionierte, bei anderen alledings erschien der Editor (TinyMCE) problemlos. Genau lässt sich auch nicht sagen, seit wann das Problem wirklich existiert, vermutlich schon seit einer der früheren 3.0.X-Versionen.
Das Problem
Die Identifikation des genauen Symptoms war per Firefox-Fehlerkonsole relativ schnell erledigt. jQuery wurde scheinbar nicht korrekt geladen, wodurch darauf aufbauende Javascripts Fehler wie z.B. „jquery is not defined“ oder „edButtons is undefined“ auswurfen.
[singlepic id=1 w=614 h=420]
Die Herkunft des Problems lag allerdings etwas tiefer….
Vorgeschlagene Lösungen
Erste Amtshandlung nach Identifikation der Fehlerquelle war (wie vermutlich bei den meisten) Googlen nach der Meldung aus der Fehlerkonsole. Resultat: http://lmgtfy.com/?q=wordpress+jquery+is+not+defined.
Unter den Support-Forum-Posts der Google-Ergebnisse wurde das Deaktivieren von Plugins zur Eingrenzung der Ursache (z.B. http://wordpress.org/support/topic/javascript-error-jquery-is-not-defined) oder noch häufiger ein erneuter Upload der entsprechenden Javascript-Dateien per FTP-Binärmodus (z.B. http://wordpress.org/support/topic/jquery-is-not-defined) vorgeschlagen.
Lösen ließ sich das Problem in unserem Fall damit allerdings nicht, denn die JS-Dateien kommen bei uns über ein Shell-Update-Skript direkt aus dem WordPress-SVN und auch nachdem alle Plugins deaktiviert waren, bestand der Fehler weiter, obwohl wir z.B. auch das (wie ich persönlich finde) sehr gute, im ersten Link erwähnte Admin Dropdown Menü verwenden.
Die tatsächliche Lösung
Bei der weiteren Suche bin ich dann schnell an der Javascript-Quelle hängen geblieben, die – wie man im Screenshot oben gut erkennen kann – das PHP-Skript „load-scripts.php“ nutzt, um verschiedene Einzeldateien zur Verkürzung der Ladezeit zu konkatenieren. Dieser Mechnismus hat wohl auch schon in anderen Konstellationen Fehler verursacht, siehe z.B. http://wordpress.org/support/topic/wp-28-jquery-error. Durch einfaches Abschalten der Skriptverkettung sowie (sicherheitshalber) auch der gleichzeitig von WP durchgeführten Kompression mittels gzip, konnte der Fehler schließlich relativ einfach beseitigt werden. Hierzu müssen lediglich die beiden folgenden Zeilen in die Datei wp-config.php eingefügt werden, die sich im Root-Verzeichnis der WordPress-Installation befindet:
define('CONCATENATE_SCRIPTS', false); define('COMPRESS_SCRIPTS', false);