Grundsätzlich ist es ja sehr einfach ein Child Theme eines bestehenden WordPress Themes zu erstellen.
Einfach eine neues Verzeichnis erstellen, styles.css erstellen und den Parent-Template Hinweis hinzufügen und dann die Theme Files in dem Verzeichnis ablegen. Genau ist das z.B. im WordPress Codex beschrieben: ChildThemes
Ein Stoplerstein sind Änderungen an der Datei functions.php. Manchmal werden im Parent Theme Einstellungen in der functions.php gemacht, die man in seinem eigenen Child Theme gerne anders machen will.
Beispiel:
Als konkretes Beispiel wollte ich im meinem YOKO Child Theme kleinere Headergrafiken verwenden, so dass ich die Default Grafiken des YOKO Themes nicht mehr bekommen will. In der originalen functions.php findet sich dies:
// Default custom headers packaged with the theme. %s is a placeholder for the theme template directory URI. register_default_headers( array( 'ginko' => array( 'url' => '%s/images/headers/ginko.jpg', 'thumbnail_url' => '%s/images/headers/ginko-thumbnail.jpg', /* translators: header image description */ 'description' => __( 'Ginko', 'yoko' ) ),
Der einfachste Weg wäre diese Zeilen aus der original functions.php zu löschen. Darf man aber nicht, man will ja ein Child Theme erstellen. Die ganze Datei zu kopieren ist auch keine Lösung, da die Funktionen dann doppelt vorhanden sind und Fehlermeldungen erzeugen.
Also sucht man für diesen Fall in der WordPress Dokumentation und findet die Funktion unregister_default_headers.
Die Funktion sieht dann so aus:
unregister_default_headers( array( 'ginko', 'flowers', 'plant', 'sailing', 'cape', 'seagull') );
Problem:
Geht so aber nicht! Denn WordPress führt die functions.php des Child Theme vor der des Parent Themes aus!
Lösung:
Der Trick ist nun, die Änderungen in der functions.php des Child Themes in Funktionen zu kapseln und diese Funktionen dann in die Hooks von WordPress einzuhängen.
Zusätzlich muss die Priorität der Abarbeitung verringert werden.
function childtheme_remove_default_headers() {
unregister_default_headers( array(
'ginko',
'flowers',
'plant',
'sailing',
'cape',
'seagull')
);
}
add_action( 'after_setup_theme', 'childtheme_remove_default_headers', 11 );
Das ganze bewirkt nun folgendes.
WordPress läd die functions.php des Child Themes. Es findet den add_action Aufruf und hängt den Aufruf der Funktion childtheme_remove_default_headers in die Bearbeitungsliste für den after_setup_theme Hook. Der Parameter 11 verringert die Priorität.
Hat WordPress nun alles geladen, werden die Hooks abgearbeitet. Dabei wird erst der Aufruf der register_default_headers aus dem Parent Theme ausgeführt und danach (wegen der geringeren Priorität) der unregister_default_headers Aufruf.
Über diesen Ablauf – die gewünschten Änderungen an der functions.php in einer eigenen Funktion zu kapseln und dann diese Funktion über einen WordPress Hook aufrufen zu lassen – sind alle Arten von Anpassungen von bestehenden Funktionen in der functions.php des Parent Themes machbar.
Man kann sich bei dem Vorgehen an der originalen functions.php Datei orientieren. Man sucht den Aufruf, den man im eigenen Child Theme ändern will. Anschliessend sucht man die umgebende Funktion, die dann am Ende über einen WordPress Hook aufgerufen wird (add_action oder add_filter). In der functions.php des Child Themes ruft man die eigene Funktion nun mit dem identischen Hook auf, nur mit geringerer Priorität.
Gefällt dir der Beitrag? Dann teile ihn!