Vorlage kopieren
Jeder Verein bekommt sein eigenes Child-Theme. Es trägt nur, was sich vom Parent wpce-theme unterscheidet: Farben, Schriften, ein paar Werte, im Notfall eine Vorlage. Alles andere kommt vom Parent und bleibt dadurch aktuell.
Du fängst nicht bei null an. Die Vorlage wpce-child-template ist ein fertiges, schlankes Child: ein Theme-Kopf, eine theme.json mit der Palette, eine leere Stylesheet-Datei und ein Skript zum Umbenennen. Du lädst sie als ZIP und machst daraus einmal je Verein ein eigenes Theme. Es läuft auf deinem Hosting, und du lieferst es selbst aus.
Die Vorlage wird kopiert, nicht aktualisiert. Verbesserungen an der Vorlage erreichen bestehende Childs nicht von selbst. Wer sie braucht, übernimmt sie von Hand.
Das Child braucht mindestens das Theme wpce-theme 1.0.0 und das Plugin WP Club Elements 1.0.0. Eine Prüfung der Versionen im Code gibt es nicht. Die Mindestzahlen stehen im Änderungsverlauf der readme.txt der Vorlage („Needs WPCE Theme 1.0 and WP Club Elements 1.0“). Mehr dazu auf der Seite Mindestversionen.
Was im ZIP steckt
Abschnitt betitelt „Was im ZIP steckt“Die Vorlage gibt es als ZIP auf der Seite Installieren, im Abschnitt „Für Agenturen“. Ich habe das ZIP der Version 1.0.1 geöffnet. Es enthält:
wpce-child-template/├─ style.css nur der Theme-Kopf (Template: wpce-theme, Text Domain = Slug)├─ theme.json Palette und andere Token├─ functions.php Text Domain, child.css laden, Update-Hook├─ inc/updater.php meldet das Child beim Update-Server von Die Technikbude an├─ assets/css/ child.css├─ vendor/ die Update-Bibliothek dazu (fertig installiert)├─ readme.txt Beschreibung und Änderungsverlauf├─ README.md die Anleitung der Vorlage (englisch)├─ LICENSE├─ screenshot.png 1200 × 900, in der Vorlage das Bild des Produkts├─ .gitlab/ Vorlage für Merge Requests└─ bin/ rename.sh, screenshot.mjs, mark.svgDas Child hat keinen Build-Schritt. Es hat keine Blöcke und kein SCSS. Wenn du das je brauchst, nimm das Setup vom Parent.
Der Update-Hook (inc/updater.php, vendor/) ist für Vereine da, die Die Technikbude selbst betreibt: Ihr Child kommt vom Update-Server updates.die-technikbude.de. Ein Child, das auf deinem eigenen Hosting läuft, braucht ihn nicht und nimmt ihn mit --no-updater heraus. Eine Pipeline-Datei (.gitlab-ci.yml), eine composer.json und eine .distignore brauchst du dafür nicht. Das ZIP enthält sie auch nicht.
Schritt für Schritt
Abschnitt betitelt „Schritt für Schritt“Du brauchst Bash und, wenn du das Child in Git verwalten willst, Git. Auf Windows läuft das Skript in Git Bash oder WSL.
- Lade das ZIP, entpacke es und gib dem Ordner gleich den Namen des neuen Themes. WordPress erkennt ein Theme am Ordnernamen.
unzip wpce-child-template-1.0.1.zipmv wpce-child-template wpce-tsvmscd wpce-tsvms- Benenne die Vorlage um und nimm den Update-Hook heraus. Das Skript bekommt das Kürzel des Vereins, seinen Namen und die Option
--no-updater.
bin/rename.sh tsvms "TSV Musterstadt e. V." --no-updaterDas Kürzel besteht nur aus Kleinbuchstaben a-z und Ziffern, ohne Bindestrich. Aus tsvms wird der Slug wpce-tsvms. Das Skript ersetzt wpce-child-template durch den Slug und „WPCE Child Template“ durch den Vereinsnamen, in allen Dateien außer .git, vendor und bin. Es setzt den PHP-Namensraum auf WPCE\Child_tsvms und entfernt bin/screenshot.mjs und bin/mark.svg (sie zeichnen nur das Bild der Vorlage).
Mit --no-updater entfernt es außerdem inc/updater.php und die Zeile in functions.php, die sie lädt, den Ordner vendor/, die Zeile Update URI in style.css und den Satz über den Update-Server in readme.txt. Das Theme wpce-theme und das Plugin behalten ihre eigenen Update-Haken. Läuft das Skript ein zweites Mal, ändert es nichts mehr. Ich habe es auf dem ZIP der Version 1.0.1 laufen lassen und die umbenannte functions.php mit php -l geprüft.
Das Skript schreibt außerdem /bin und /README.md in eine .distignore. Das ist die Liste dessen, was die Pipeline von Die Technikbude nicht ins Paket eines Vereins packt. Wenn du dein Paket selbst packst, ignorier die Datei oder nimm sie als Merkzettel: bin/ und README.md sind Werkzeug, kein Teil des Themes.
- Setze die Palette in
theme.json. Das steht auf der Seite Farben, Schriften, Abstände. - Ersetze
screenshot.png(1200 × 900 Pixel) und beschreibe den Verein inreadme.txt. Das Bild der Vorlage zeigt das Zeichen von WP Club Elements und die Zeile „Die Vorlage für das Child-Theme“. Solange du es nicht ersetzt, zeigt WordPress es unter „Design“ → „Themes“ für das Child des Vereins. Nimm ein Bild der Startseite des Vereins. - Pack den Ordner
wpce-tsvmszu einem ZIP und spiel es ein, oder kopiere ihn nachwp-content/themes/. Wie du es auslieferst und aktualisierst, entscheidest du. Das Child bekommt von Die Technikbude keine Updates.
Den Ordner des Themes hast du schon in Schritt 1 wpce-tsvms genannt. Das Skript benennt ihn nicht um.
Was zusammenpassen muss
Abschnitt betitelt „Was zusammenpassen muss“Das Skript ersetzt den alten Slug wpce-child-template in allen Dateien, die ihn tragen. Danach muss das hier übereinstimmen:
| Wo | Was | Beispiel |
|---|---|---|
| Ordnername des Themes | der Slug | wpce-tsvms |
style.css, Text Domain |
derselbe Slug | wpce-tsvms |
style.css, Template |
immer der Parent, nie ändern | wpce-theme |
functions.php, load_child_theme_textdomain() |
derselbe Slug | wpce-tsvms |
Das Skript setzt außerdem den Theme-Namen im Kopf von style.css auf den Vereinsnamen und gibt dem PHP-Namensraum das Kürzel (WPCE\Child_tsvms). Den Ordner benennt es nicht um. Das machst du selbst.
So prüfst du, ob der Kopf stimmt: Lies das umbenannte Theme mit new WP_Theme( 'wpce-tsvms', $theme_root ) ein. Ein richtig umbenanntes Child nennt wpce-theme als Parent, meldet keinen Fehler und gilt als Block-Theme (is_block_theme()).
Ein Child für Vereine, die Die Technikbude selbst betreibt, läuft ohne
--no-updater. Es behält den Update-Hook und die ZeileUpdate URI(https://updates.die-technikbude.de/wp/wpce-<kuerzel>) und wird als eigenes Paket vom Update-Server ausgeliefert. Dafür gibt es einen eigenen Weg über das Repository der Vorlage. Er ist nicht für Agenturen gedacht und steht hier nicht Schritt für Schritt.
Aktivieren
Abschnitt betitelt „Aktivieren“Der Parent wpce-theme und das Plugin WP Club Elements müssen installiert sein. Dann unter Design → Themes das Child aktivieren. Die Namen und das Logo des Vereins muss das Child nicht ändern: WP Club Elements hält Website-Titel und Website-Logo gleich Name und Logo aus den Vereinsdaten.
Was in ein Child gehört und was nie
Abschnitt betitelt „Was in ein Child gehört und was nie“Gehört hinein:
- die Palette und andere Werte in
theme.json, - Schriften, die der Verein eigens hat,
- ein paar Zeilen CSS in
assets/css/child.css, wenntheme.jsonetwas nicht ausdrücken kann, - im Ausnahmefall ein Pattern, ein Template-Teil oder eine Vorlage, die der Verein anders braucht.
Gehört nicht hinein:
- Kopien von Parent-Dateien ohne Not. Eine kopierte Vorlage, ein Teil oder ein Pattern mit dem Slug des Parents bekommt keine Parent-Updates mehr. Sie hängt dann an dem Stand, von dem du kopiert hast.
- Menü-Orte und
add_theme_support(). Der Parent registriert sie schon. Wer sie ein zweites Mal anmeldet, bekommt doppelte Einträge oder Überraschungen. - Name und Logo des Vereins.
- Eigene Blöcke und ein Build. Dafür ist ein Add-on da, siehe Eigene Inhaltstypen.
Die Liste „Was ist überschrieben“
Abschnitt betitelt „Die Liste „Was ist überschrieben““Die README.md der Vorlage hat eine Tabelle „What is overridden“. Halte sie aktuell. Sobald du eine templates/*.html, eine parts/*.html oder ein Pattern mit dem Slug des Parents kopierst, trägst du die Datei dort ein, mit dem Grund. Die README.md kommt nicht ins Paket des Vereins, aber sie bleibt in deinem Repository.
| Datei | Warum |
|---|---|
parts/footer.html |
Fußzeile mit einer Zeile, der Verein hat keine Spalten |
Die Liste zeigt, wie viel Arbeit vor dem nächsten Major des Parents ansteht. Jede Datei dort folgt dem Parent nicht mehr.
Wenn der Parent einen neuen Major hat
Abschnitt betitelt „Wenn der Parent einen neuen Major hat“Ein Major bricht Dinge. Er erreicht eine Website nie von selbst: Eine Website fragt den Update-Kanal ihrer eigenen Hauptversion. Der Parent hat heute die Hauptversion 1.
Dein Child hat mit --no-updater keinen eigenen Kanal. Das Theme wpce-theme und das Plugin bekommen ihre Updates weiter vom Update-Server, mit ihrem eigenen Update-Hook, auch wenn das Child keinen hat. Kommt einmal die Hauptversion 2 des Themes und hast du dein Child dafür angepasst, stellst du die Website auf den neuen Kanal um. Das geht ohne Code in der wp-config.php, mit der Konstante DTB_UPDATES_MAJOR, einem Array mit einem Eintrag je Paket: define( 'DTB_UPDATES_MAJOR', array( 'wpce-theme' => 2 ) );. Für das Child selbst ist dabei nichts zu tun.
Ein Child mit Update-Hook (ohne --no-updater) sagt dagegen selbst, für welchen Major es gebaut ist, mit add_filter( 'dtb_updater_major/wpce-theme', fn() => 2 ); in seiner functions.php. Der Filter schlägt die Konstante. Die Update-Bibliothek kennt beides. Gegen ihren Quelltext gelesen, nicht auf einer Website ausprobiert. Mehr dazu auf der Seite Updates und Kanäle.
- Farben, Schriften, Abstände: das Aussehen über
theme.json. - Was ein Child ohne PHP kann: der Katalog mit je einem Beispiel.