Von allen guten und bösen Geistern verlassen

Früher, als alles noch einfacher war, benötigte man keinen WordPress Hack. Man hat einfach nach Lust und Laune im Theme herumgepfuscht. Ob das dann überhaupt noch updatefähig war, interessierte nicht.

Pfusch im Wandel der Zeit

Natürlich ist es extrem unklug, Dinge so zu verändern, dass sie sich nicht mehr aktualisieren lassen. Zum einen, weil es immer mal ein Update geben könnte, welches Sicherheitslücken patcht. Zum anderen auch deshalb, weil über neue Versionen auch neue Feature dazukommen könnten, welche man gerne hätte — darauf dann aber verzichten muss, weil die vorgenommenen Änderungen überschrieben würden.
In WordPress gibt es seit einigen Jahren die Möglichkeit, für ein Theme ein so genanntes Child-Theme zu entwickeln. Ändert man nicht viel, sieht es recht rudimentär aus, ist aber erheblich besser als am Parent Theme herumzupfuschen. Mit der Zeit, so zumindest meine Erfahrung, kommen dann meistens doch noch Ergänzungen hinzu, das eigene Child Theme wächst.
Darüber hinaus hat WordPress noch ein sehr flexibles System von Hooks, welches Thomas Herzog drüben bei MarketPress recht gut beschreibt. In der Regel kommt man für die meisten Anpassungen im Child-Theme jedoch ohne Hooks aus.

WordPress Hack über Hooks

MichaelGaida / Pixabay

Grenzen eines Child Themes

An die Grenzen der Möglichkeiten stieß ich vor zwei Jahren, als ich am Theme für wandersehnsucht.de arbeitet. Nur mittels Hooks kam ich zum selbst gesetzten Ziel. Beruflich oft mit Divi unterwegs, stieß ich in den letzten Monaten nie an die Grenzen bei entwickelten Child Themes. Das was ich als einfache Erklärung von Child Themes aufgeschrieben hatte, funktionierte stets einwandfrei. Entsprechend zuversichtlich war ich, für das Redesign hier im Blog auf der Grundlage eines vorhanden Themes schnell voran zu kommen.
Darin habe ich mich allerdings gründlich getäuscht. Die Einbindung der style.css wurde zu einem nervenaufreibenden Prozess, an dessen Ende ich mir mein Scheiter eingestehen musste. Stundenlange Reichere am Wochenende brachte zwar einige weitere Vorschläge, aber keine wirkliche Lösung. Egal was ich tat, ein Teil der Informationen aus der Parent style.css wurde nicht geladen. Nur durch hartes kopieren der CSS-Anweisungen aus der Parent style.css in die entsprechende Datei meines Child-Themes konnte ich das Problem „lösen“.

WordPress Hack als richtige Lösung

CSS einfach rüber zu kopieren ist in meinen Augen allerdings keine echte Lösung. Es ist im Prinzip auch wieder nur Pfusch, wenn vielleicht auf einem etwas höherem Niveau. In meiner Verzweiflung schrieb ich den Entwickler des Themes an und bekam auch recht zügig eine leider unbrauchbare Antwort. Das Kernproblem ist wohl, dass nicht nur ein CSS-Datei im Parent Theme geladen werden, sondern mehrere. Und die müssen dann auch in ganz bestimmter Reihenfolge geladen werden. Erst zuletzt folgen dann die eigenen Änderungen. Richtig hinbekommen habe ich das nicht, aber es gibt ja den Zauberkasten. Ein WordPress Hack  ist streng genommen keine echter Hack, sondern die Nutzung dessen, was WordPress zur Verfügung stellten. Eben jene bereits erwähnten Hooks. Man braucht etwas Zeit, bis man ein klare Bild von dem bekommt, was man Google fragen will. Heute Morgen, zwischen Kaffee und Büro stieß ich dann endlich auf eine Lösung.

Löschen und passend machen

Tatsächlich liegt der Schlüssel zum Erfolg, zumindest im Fall meines Child Themes darin, einen bestimmten Teil aus der functions.php zu löschen und genau diesen Teil dann im Child Theme passend zu machen. Da es aber ein WordPress Hack und kein Pfusch sein sollte, verbietet es sich, in die functions.php des Parent Themes direkt einzugreifen. Wirklich weiter geholfen hat mir der Artikel „A Guide to Overriding Parent Theme Functions in Your Child Theme“. Genau das brauchte ich nämlich. Aus der functions.php des Parent Themes sollte der Teil gelöscht werden, der für die Einbindung der CSS-Dateien zuständig ist. Dazu muss man in der functions.php zunächst den Teil identifizieren, welchen man löschen will — in der Regel eine Funktion, die über add_action() aufgerufen wird. Diese Funktion kann dann mit dem folgenden Konstrukt „gelöscht“ werden:

function child_remove_parent_function() {
    remove_action( 'admin_menu', NAMEDERFUNKTION );
    remove_action( 'wp_enqueue_scripts', 'writers_scripts' );
}
add_action( 'wp_loaded', 'child_remove_parent_function' );

Im meinen Fall hatte ich damit das Theme von sämtlichen CSS-Dateien befreit. Wichtig ist hier, dass der Aufruf dann erfolgt, wenn  alle Themes und Plugins geladen sind — dafür ist der Hook wp_loaded nützlich.  Anschließend konnte ich dann angelehnt an die „gelöschte“ Funktion meine eigene Funktion mit dem Aufruf der CSS-Dateien samt der style.css des Child Themes implementieren.
Sieht wie ein WordPress Hack aus, ist aber zumindest gefühlt eine saubere und elegante Lösung.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

DSGVO Cookie Consent mit Real Cookie Banner