Wenn die Website größer wird, werden functions.php und Plugins zu Monstern

22. August 2011 - wordpress

Es fängt meistens klein an und wird dann größer als gedacht: das CMS für einen Kunden. Leider ist das Wachstum keine Stärke von WordPress. Nette Annehmlichkeiten entwickeln sich dann zu unzähmbaren Code-Monstern.

English Summary: If your WordPress CMS website grows, be sure that some of the functionality inside WordPress you always loved before is going to kill you, i.e. functions.php or plugins .

Bei 50 Seiten im CMS hatte meine functions.php bereits 1000 Zeilen Code, bei 100 waren es über 2000. Aus fünf Plugins wurden fünfundzwanzig, davon die Hälfte selbst geschrieben. Von der Größe der CSS Dateien will ich erst gar nicht anfangen.

Dabei war die einzelne Seite  im Durchschnitt nicht komplizierter geworden. Es waren aber mehr, und jede Seite brauchte einen etwas anderen Code, eine etwas individuellere CSS Behandlung.

Ein Webshop auf WordPress? Vergiß es. Das Ding fliegt Dir um die Ohren, dann, wenn Du es am wenigsten gebrauchen kannst: wenn es wächst. Sagt man dann dem Kunden: wir müssen jetzt auf xx wechseln, dauert aber ein Jahr? Oder zwei?

Ich mag WordPress eigentlich sehr, aber man sollte auch wissen, wo die Grenzen für ein CMS auf dieser Basis liegen:

Man kann den Code für eine spezielle Seite nicht einer speziellen Seite zuordnen. Sicher, man kann js Scripte einer Seite beim Laden zuordnen, um die Ladezeiten zu verrringern. Auf dem Server muß aber der Inhalt der gesamten Webseite, auch alles, was in functions.php oder den plugins enthalten ist, einmal geladen werden. Für die Webseite yy werden dann die meisten dieser Funktionen nicht aufgerufen, das verringert die Rechenzeit, aber geladen werden muss das ganze Zeug.

Die meisten Provider bieten für das Geld eine Produkt aus max. Rechenzeit mal  max. Speicherbedarf an. Leider hat man auf den Speicherbedarf als Programmierer wenig Einfluß.

Wo sind die functions-sponsoren.php, functions-aktionen.php, functions-was-weiss-ich.php für jede spezielle Webseite? Plugins, die zu 100% einer bestimmten Webseite zuordbar sind, und nicht nur für den js Teil?

Natürlich kann man aus jeder page.php eine aktionen.php oder sponsoren.php machen und den Code da reinschreiben oder inkludieren. Wo bleibt aber dann das template Konzept, wenn man 15mal page.php verwendet und 85 Sonderseiten hat?

Ein riesige functions.php lässt sich auch nicht mehr warten, weil Nebeneffekte auf anderen Seiten nicht ausgeschlossen werden können. Man verbessert einen Fehler und fängt sich einen anderen auf einer anderen Webseite ein, die bis dahin immer problemlos funktionierte.

Ich will hier nicht behaupten, dass das Problem zu komplex wäre, um gelöst zu werden. Natürlich kann man von außen dazu programmieren. Aber der richtige Ansatz dafür liegt im WordPress kernel.