Support » Themes » Child Theme für GeneratePress?

  • Gelöst memora1898

    (@memora1898)


    Wie angedroht, wende ich mich wieder mit einer Frage an Euch.

    Status Quo: als Theme habe ich derzeit GeneratePress aktiviert. Auf die Theme-Vorlage Sider muss ich verzichten, da die GP-Vorlagen nur in der Premium-Version genutzt werden können. Ein seitliches Menü habe ich aufgrund einer sehr einfachen Anleitung (vD HG) hingekriegt. In der Folge suchte ich nach Tutorials, z.B. um den Footer zu entfernen, der normalerweise bei GP nicht deaktiviert werden kann. Was anscheinend via CSS möglich ist (zumindest wenn man kein Anfänger ist und Ahnung hat).

    Dabei stiess ich auf den Begriff Child-Theme. Also nachdem es bei WP nicht einfach nur Vorlagen gibt, sondern man bereits nach Theme und Template unterscheiden muss, gibt es jetzt auch noch Parent-Themes und Child-Themes? Ok.
    Wenn ich das ganze richtig verstanden habe, dient ein Child-Theme dazu, dass man grundlegende Stil-Optionen vom Haupttheme (also in meinem Fall GP) übernimmt, dann aber Anpassungen vornehmen kann, die bei einem Update von GeneratePress nicht verloren gehen? Bedeutet das, dass ich ein Child-Theme benötige, wenn ich so etwas wie das Entfernen des Footers via CSS u.a. plane?

    Nicht dass ich jetzt einfach mit dem GeneratePress-Theme weiterfahre, da viel Zeit in Anpassungen investiere, und die dann bei einem Update von GP weg sind.

    Ein Child-Theme kann man anscheinend mit Plugins erstellen. Würde das mal versuchen, falls Ihr mir das empfehlt.

Ansicht von 8 Antworten - 1 bis 8 (von insgesamt 8)
  • … z.B. um den Footer zu entfernen, der normalerweise bei GP nicht deaktiviert werden kann. Was anscheinend via CSS möglich ist (zumindest wenn man kein Anfänger ist und Ahnung hat).

    Du kannst mit CSS-Regeln Bereiche ausblenden, aber sie werden trotzdem bei jedem Seitenaufruf in den Browser geladen. Professioneller ist es, wenn du in einem Child-Theme das Template footer.php nach deinen Wünschen anpasst, was aber Grundkenntnisse in PHP voraussetzt.

    … gibt es jetzt auch noch Parent-Themes und Child-Themes?

    Ein Child-Theme ist eine Ergänzung eines Themes (das dadurch zum Parent-Theme wird), in dem du eigene Templates hinzufügen oder Templates des Parent-Theme kopieren und nach deinen Wünschen anpassen kannst (siehe oben).

    Es ist keine Raketenwissenschaft, ein Child Theme anzulegen. In der Dokumentation von GeneratePress findest du einige Erläuterungen zu Child-Themes: https://docs.generatepress.com/article/using-child-theme/

    Dort kannst du auch ein fertiges Child-Theme herunterladen:
    https://generatepress.com/api/themes/generatepress_child.zip

    Das kannst du dann auch an deine Bedürfnisse anpassen, z.B. in dem du in der Datei style.css das Child-Theme umbenennst:

    /*
     Theme Name:   Meine Version von GeneratePress
     Description:  GeneratePress, so wie es mir gefällt
     Author:       @memora1898
     Template:     generatepress
     Version:      0.1
    */

    Nicht dass ich jetzt einfach mit dem GeneratePress-Theme weiterfahre, da viel Zeit in Anpassungen investiere, und die dann bei einem Update von GP weg sind.

    Änderungen in Themes werden bei Updates tatsächlich überschrieben und genau deshalb solltest du Änderungen immer in einem Child-Theme vornehmen – das bleibt dir erhalten, unabhängig davon, ob das Parent Theme mal wieder aktualisiert wird.

    Übrigens: wechselst du von einem Parent-Theme zu einem Child-Theme, fängst du bei deinen Einstellungen im Customizer wieder bei Null an. Möchtest du die Einstellungen übertragen, solltest du sie vor Theme-Wechsel mit dem Plugin Customizer Export/Import exportieren und dann im neuen Theme wieder importieren. Das spart viel Zeit. 🙂

    Thread-Ersteller memora1898

    (@memora1898)

    Super, das klingt doch machbar 🙂 Vielen Dank für die gute Erklärung.

    Auch den Tipp mit dem Customizer Export/Import werde ich mir definitiv merken. In diesem Fall – da ich ja noch nicht so weit fortgeschritten bin mit meinen Anpassungen – lade ich mir das gp_child.zip runter und fange nochmal bei 0 an. Die paar Schritte zu wiederholen, scheint mir eine gute Übung.

    Hallo,
    an sich brauchst du aber kein Child-Theme, wenn es nur darum geht, den footer komplett auszublenden.
    Teste doch mal bitte unter Design > Customizer > zusätzliches CSS:

    .site-footer {
        display: none;
    }

    Viele Grüße
    Hans-Gerd

    Thread-Ersteller memora1898

    (@memora1898)

    Hallo Hans-Gerd

    Gerade ausprobiert. Kinderleicht und funktioniert :). Vielen Dank.

    Was das Child-Theme anbelangt: ob es nur bei der Änderung des footers bleibt, oder ich noch mehr am Theme ändern werde, kann ich noch nicht sagen. Das wird sich wohl erst mit der Zeit ergeben, wenn ich mich besser auskenne.

    Würdest Du eher empfehlen, dass ich auf ein Child-Theme verzichte? Gibt es Nachteile, wenn man ein Child-Theme verwendet?

    Lieben Dank
    Bianka

    • Diese Antwort wurde geändert vor 5 Monaten, 1 Woche von memora1898.

    Hallo Bianka,
    wenn es lediglich um ein paar optische Änderungen geht, dann braucht man in der Regel kein Child Theme, sondern kann die entsprechenden CSS-Regeln wie beschrieben unter Design > Customizer > zusätzliches CSS schreiben.
    Wenn dir also beispielsweise die Schriftgröße einer H1-Überschrift zu groß ist, dann wäre das beispielsweise:

    h2.entry-title {
        font-size: 1.5em;
    }

    Diese Regeln bleiben auch dann bestehen, wenn ein Update des Themes durchgeführt wird.
    Wenn aber beispielsweise eine Corona-Meldung zu Verhaltensweise bei Veranstaltungen jedes Mal über allen Veranstaltungen angezeigt werden soll, dann ist es in der Regel notwendig, eine entsprechende Funktion (Stichwort Hook) zu erstellen. Diese Funktion würde dann in die functions.php eines Child-Themes geschrieben.
    Der Vorteil besteht darin, dass nach einem Update des Themes diese Funktion weiter existiert, weil CSS-Regeln und Funktionen im Child-Theme durch ein Update des Parent-Themes nicht überschrieben wird.
    Aber eigentlich hat Bego das bereits ausführlich beschrieben und es gibt ganz viele Beiträge im Netz zu diesem Thema (einige hat Bego ja bereits verlinkt).
    Ein „Nachteil“ ergibt sich dadurch, weil zusätzliche Dateien geladen werden müssen (zumindest style.css und functions.php), aber das hat kaum Auswirkungen auf die Performance.
    Schwieriger wird es bei Änderungen von Templates des Parent Themes. Wenn das eigentliche Template des Parent Themes im Rahmen eines Updates geändert wird, dann muss auch das Template des Child Themes in der Regel angepasst werden. Aus dem Grund teilen die Entwickler zumindest teilweise auch mit, ob und welches Template geändert wurde.
    Einen viel ausführlicheren guten Beitrag findest du z. B. hier.
    Viele Grüße
    Hans-Gerd

    Thread-Ersteller memora1898

    (@memora1898)

    Guten Morgen Hans-Gerd

    Wahrscheinlich bin ich noch nicht ganz wach, aber die eine oder andere Info ist mir da doch ein bisschen zu detailliert. Z.B. die Seite mit den Infos zu Hooks. Scheint nicht gerade für branchenfremde Technophobiker wie mich geschrieben worden zu sein 😉

    Die Seite mit den Infos zum Child-Theme finde ich einerseits interessant, weil man anhand der Anleitung wirklich von Grund auf selbst ein Child-Theme erstellen kann, aber in meinem Fall finde ich die Lösung mit dem vorbereiteten Child-Theme von GeneratePress und dem Import via zip-Datei doch einfacher.

    Das habe ich nun zumindest mal ausprobiert – einfach um zu sehen, ob das klappt. Was der Fall war. Und habe auch getestet, ob ich das mit dem footer hinkriegen würde. Auf der GP-Seite findet sich zum Thema footer folgendes:

    add_action( 'after_setup_theme', 'tu_remove_footer_area' );
    function tu_remove_footer_area() {
        remove_action( 'generate_footer','generate_construct_footer' );
    }

    Habe die Zeilen in die functions.php reinkopiert, was dann auch dazu führte, dass der footer weg war. Ohne die Schritt-für-Schritt-Anleitung hätte ich das aber ganz klar nicht geschafft.

    Was ich mir nochmals genauer ansehen muss, ist der Punkt mit den Änderungen von Templates-Dateien, die ins Child-Theme kopiert wurden (hmm, was?). Aber ich brauche vermutlich zuerst 1-2 Liter Kaffee 😉

    Beste Grüsse
    Bianka

    „Hooks“ sind Programmierschnittstellen, die Programmierer im Code von WordPress, Themes und Plugins einfügen, damit Nutzer ihren eigenen Code „einhaken“ können. Die Nutzung setzt ein wenig Programmierkenntnisse in PHP voraus, bietet dann aber viel Flexibilität, um WordPress so einzurichten wie du das möchtest. In diesem Fall hast du gesehen, dass sich scheinbar mit einem Hook auch der Footer komplett deaktivieren lässt – eine bessere Lösung, als in in jeder Webseite zu laden und dann mit einer CSS-Regel auszublenden.

    Es bereitet nur kurze Freude, Funktion in der Datei functions.php eines Themes unterzubringen, weil die Datei beim nächsten Theme-Update wieder überschrieben wird. Besser ist es also wie schon erläutert, ein Child-Theme anzulegen und die functions.php dort zu ergänzen.
    Wenn dir das zuviel Mühe ist, kannst du aber auch das Plugin Code Snippets nutzen und den Code als so genanntes Code Snippet einfügen. Durch den Hook wird er an der richtigen Stelle ausgeführt. CSS-Regeln kannst du auch im Customizer unter „Zusätzliches CSS“ einfügen. Kurz: es geht auch ohne Child-Theme, solange du nicht eigene Templates hinzufügen oder vorhandene Templates nach deinen Wünschen anpassen möchtest. Dafür brauchst du dann oft schon gute Programmierkenntnisse in PHP.

    Zu deiner Frage zu Nachtteilen von Child-Themes: Ja, es gibt Nachteile.

    Nehmen wir an, du möchtest am Ende jeder Seite, noch unterhalb des Footers, die Zeile „Mit viel Liebe gemacht“ einfügen. Der übliche Weg ist, ein Child-Theme einzurichten (oder in diesem Fall vom Entwickler herunterzuladen und installieren) und dann die Datei footer.php des Parent-Theme in das Child-Theme zu kopieren. Dort nimmst du dann deine Anpassung vor, indem du vor das HTML-Tag </html> die Zeile <p>Mit viel Liebe gemacht.</p> einfügst.
    WordPress schaut immer erst einmal, ob ein Child-Theme existiert und dort passende Templates vorhanden sind, erkennt dort das Template footer.php und verwendet dieses. Am Ende der Seite wird die neue Zeile ausgegeben. So weit, so gut.
    Problematisch wird es nun, wenn der Theme-Entwickler erkennt, dass er im Template footer.php seines (Parent-)Themes einen üblen Programmierfehler gemacht hat, der eine Sicherheitslücke in deiner Website erzeugt. Natürlich korrigiert er umgehend seinen Fehler und bietet eine Aktualisierung des Parent-Themes an. Das Parent Theme bekommt also eine neue Datei footer.php – das Child Theme aber nicht, weil es ausdrücklich von Updates ausgenommen bleibt! Du bekommst auch keinen Hinweis, dass hier dringend Handlungsbedarf besteht und du dein Child-Theme anpassen müsstest. Streng genommen müsstest du also nach jedem Update des Parent Theme prüfen, ob deine Templates davon betroffen sind (wofür es sogar ein Plugin gibt).

    Es kommen noch andere, nicht so gravierende Nachteile hinzu, etwa wenn es darum geht, die Webseite an einen Dritten zu übergeben, der sich nicht nur in das Theme einarbeiten muss, sondern auch deine Anpassungen kennen muss („Verflixt, wieso läd der Footer nicht?“).

    Der Webhoster Kinsta hat eine Reihe von sehr guten Beiträgen veröffentlicht, in denen wesentliche Funktionalitäten von WordPress sehr anschaulich erklärt werden. Auch zu Child Themes gibt es einen Beitrag, den du hier findest: Wie man ein Child Theme in WordPress erstellt (Erweiterte Anleitung)

    Thread-Ersteller memora1898

    (@memora1898)

    Also dann. Zu den Hooks. Ein Code kann bei WordPress nicht einfach so komplett abgeändert werden. Man kann aber den bestehenden Code erweitern, wenn im Basiscode diese Hooks eingefügt wurden? Richtig? Da ich von Programmierung keine Ahnung habe, würde ich Anpassungen auf Programmierebene nur dann vornehmen, wenn ich wie im Fall des footers einen pfannen-fertigen Code finde, mit einer Schritt-für-Schritt-Anleitung, wie und wo ich den einfügen muss. Dafür muss man nur googeln können und wissen wie man ctrl+c/ctrl+v verwendet 🙂

    Besser ist es also wie schon erläutert, ein Child-Theme anzulegen und die functions.php dort zu ergänzen.

    Ich bin wie gesagt Deiner Anleitung gefolgt. Ich habe die child-theme-Zip-Datei von GeneratePress runtergeladen, testhalber über Templates/neu hinzufügen installiert und dann via Theme-Editor die Basisinfos angepasst, bevor ich den Code in die functions.php reinkopiert habe.

    Was nun die Sache mit den Templates angeht. Mir scheint es ist zwar praktisch und sinnvoll, ein Child-Theme anzulegen, weil das auch für Anfänger nicht allzu schwer umzusetzen ist. Aber auf Anpassungen von Theme-Templates (ich wüsste nicht mal wo sich diese Dateien befinden) sollte ich zum jetzigen Zeitpunkt wohl verzichten. Mir scheint, das birgt trotz Prüf-plugin ein zu grosses Fehlerpotential, wenn man sich damit nicht auskennt.

    Aber ich befinde mich ja noch mitten im Lernprozess. Leider bin ich keine 20 mehr, womit das lernen nicht mehr ganz so leicht fällt. Aber je länger ich mich mit der Materie beschäftige, umso mehr sollte ich das ganze dann verstehen können. 🙂

    Jedenfalls danke.

Ansicht von 8 Antworten - 1 bis 8 (von insgesamt 8)