Unterordner im Child Theme nutzen

  • Hallo Leute,

    ich habe wie hier im Forum erklärt wurde ein Child-Theme erstellt und die Dateien aus dem Hauptverzeichnis integriert. Funktioniert auch alles soweit, jedoch ist mir immer noch nicht klar, wie man Unterordner aus dem Parent auch im Child laden kann. Da ich einige Dateien aus Unterordnern anpassen musste, aber nicht möchte dass diese beim nächsten Theme-Update überschrieben werden, möchte ich diese ins Child-Verzeichnis kopieren. Geht das überhaupt- und wenn ja, wie?

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Dein Child-Theme-Ordner liegt ja unter /wp-content/themes/deinchildthemeordner
    Hast Du z. B. die single.php geändert, schiebst Du die geänderte Kopie per FTP in diesen Ordner, da sie ja auch im Parent-Theme an dieser Stelle liegt.
    Änderst Du Dateien aus Unterordnern des Parent-Themes, müssen die geänderte Kopie im gleichen Unterordner des Child-Theme zu finden sein.

    Dateien vor Änderung sichern! Child-Theme oder Custom-CSS für Änderungen nutzen!

  • Änderst Du Dateien aus Unterordnern des Parent-Themes, müssen die geänderte Kopie im gleichen Unterordner des Child-Theme zu finden sein.

    So hatte ich es mir auch vorgestellt. Wenn ich jedoch einen Unterordner wie im Parent-Theme erstelle und dort die geänderte Datei einfüge, passiert gar nichts.

  • Ich frag mal ganz vorsichtig: Child-Theme ist unter Design-->Themes aktiviert?

    Dateien vor Änderung sichern! Child-Theme oder Custom-CSS für Änderungen nutzen!

  • Woher soll deine Installation wissen, dass sie auf eine Datei im Unterordner des Child-Themes zugreifen soll? Es muss auch die Datei im Child-Theme-Ordner vorhanden sein, in der die Datei im Unterverzeichnis referenziert ist (auch ein geänderter Pfad ist eine Änderung).

    Gruß
    helix

  • Woher soll deine Installation wissen, dass sie auf eine Datei im Unterordner des Child-Themes zugreifen soll? Es muss auch die Datei im Child-Theme-Ordner vorhanden sein, in der die Datei im Unterverzeichnis referenziert ist (auch ein geänderter Pfad ist eine Änderung).

    Verstehe ich nicht so ganz. Bin noch Neuling in Sachen WordPress und PHP. Kannst du das bitte mal genauer erklären?

  • Ein ganz schlichtes WordPress-Theme besteht aus fünf Dateien: header.php, index.php, footer.php, functions.php und style.css, die alle in einem Ordner mit dem Namen des Themes liegen. Ohne Unterordner.
    Du kannst in diesen Template-Dateien soviele Sub-Dateien referenzieren, wie du möchtest, z.B. über get_template_part(). Solche Sub-Dateien können aus Gründen der Übersichtlichkeit gerne in Unterordner gepackt werden. Dort, wo die Datei referenziert ist, muss dann natürlich der entsprechende Pfad angegeben sein.

    Wenn du nun beispielsweise die Datei im Unterordner angepasst hast – und sie deswegen im entsprechenden Unterordner des Child-Themes liegt, die Datei, in der die Sub-Datei referenziert ist, liegt aber nur im Parent-Theme … – dann findet WordPress natürlich nur die Sub-Datei im Unterordner des Parent-Themes, dafür ist ja der Pfad angegeben.
    Du musst also gucken: in welcher Template-Datei ist die Sub-Datei referenziert? => Eine Kopie dieser (Parent-) Template-Datei in den Child-Theme-Ordner. Und gucken, wie ist die Sub-Datei referenziert? Funktioniert das dann als dynamischer / relativer Pfad auch im Child-Theme? Oder ist ein absoluter Pfad angegeben, der auch noch entsprechend angepasst werden muss?

    Gruß
    helix

  • In der functions.php sind die entsprechenden Verweise auf die beiden Dateien. Jetzt hab ich aber im Child-Theme bereits eine functions.php. Muss ich jetzt den kompletten Code aus der Originaldatei hinter den aus der functions.php im Child-Theme kopieren? Wenn ja, müssen dort dann alle Verweise auf sämtliche php-Dateien als absoluter Pfad angegeben werden?

  • Nein, nicht den kompletten Code der parent-functions.php in die child-functions.php kopieren. Die functions.php des Child-Themes ergänzt die functions.php des parent-Themes.

    Kannst du bitte mal die Zeilen aus der functions.php des Parent-Themes posten, in denen die Datei(en) referenziert sind?

    Gruß
    helix

  • Kannst du bitte mal die Zeilen aus der functions.php des Parent-Themes posten, in denen die Datei(en) referenziert sind?

    PHP
    require get_template_directory() . '/inc/widgets/widgets-functions/register-widgets.php';
    require get_template_directory() . '/inc/footer-details.php';

    Weiß nicht ob das schon reicht.

  • Okay, es geht also um Theme-Funktionen.

    Probiere mal zuerst, ob du die Funktion aus dem Parent-Theme direkt in der functions.php des Child-Themes überschreiben kannst.
    Das sollte funktionieren, wenn die Funktion im Parent-Theme korrekt mit if ( ! function_exists( 'name-der-theme-funktion' ) ) eingebunden ist. Hintergrund: die functions.php des Child-Themes wird zuerst geladen. Wenn nun die Funktion (aus dem Child-Theme) schon existiert, wird sie aus dem Parent-Theme nicht mehr gezogen.

    Wenn das funktioniert, kannst du schauen, ob du die geänderte Funktion wieder in eine eigene Datei auslagern willst.
    Dazu brauchst du nicht unbedingt den ganzen Verzeichnispfad nachzubilden. Du könntest die (ausgelagerte) Datei auch direkt ins Child-Theme-Verzeichnis legen oder z.B. einen Unterordner für ausgelagerte Funktionen anlegen (also z.B. alle diese Dateien in einen Ordner „inc“).
    Verwende für die Angabe des Pfades statt get_template_directory() den Aufruf get_stylesheet_directory()

    Siehe https://codex.wordpress.org/Child_Themes

    Gruß
    helix

  • Bin mir nicht sicher, ob ich es richtig gemacht habe. Hier der Code...

    PHP
    if ( ! function_exists( 'pixgraphy_get_theme_options' ) ) {
        function pixgraphy_get_theme_options() {
            return wp_parse_args(  get_option( 'pixgraphy_theme_options', array() ), pixgraphy_get_option_defaults_values() );
    require_once( get_stylesheet_directory() . '/inc/footer-details.php' );
    require_once( get_stylesheet_directory() . '/inc/register-widgets.php' );
        }
    }

    Jetzt kommt zwar keine weiße Seite mehr, aber irgendwie gibt es immer noch keine Änderung. Wie gesagt, mit php kenn ich mich nicht wirklich aus! :roll:

  • Hm, ich bin nicht wirklich der Experte in Child-Themes angeht.
    Aber kannst du vielleicht einfach mal schreiben, was du eigentlich ändern wolltest?

    Gruß
    helix

  • Es geht hauptsächlich darum, dass ich an verschiedenen Stellen meiner Seite Widgets plazieren möchte, um diese dann über den Backend-Bereich schnell austauschen zu können. In der register-widgets.php habe ich dafür verschiedene Sidebars erstellt.

  • In der register-widgets.php im Parent-Theme ist die Funktion ohne das if ( ! function_exists() ) eingebunden, also kannst du die Funktion nicht einfach überschreiben.
    Also gibst du deiner widget-Anmelde-Funktion einen eigenen Namen, z.B. function pixgraphy_child_widgets_init() und schreibst dort deine eigenen (ergänzenden) Widgets rein. Das machst du zuerst einmal einfach in der functions.php des Child-Themes.
    Ich mache das immer so, dass ich der aktuellen Datei, in dem Fall functions.php einen Unterstrich vor den Dateinamen voranstelle – auf dem Server, also über FTP – und dann die erneuerte Datei hochlade. Wenn ich dann einen Fehler kriege, habe ich blitzschnell wieder zur alten Version zurückgeswitched.
    Wenn ich die Logik richtig verstehe, werden dann sowohl die pixgraphy-Widgets (aus dem Parent-Theme) als auch deine eigenen aus dem Child-Theme geladen.
    => Im Admin-Bereich unter Design -> Widgets nachschauen, ob alle angemeldeten Widget-Bereiche angezeigt werden.

    Wenn das so funktioniert, kannst du dir überlegen, ob du deine Widget-Funktion in eine eigene Datei auslagern willst oder ob du sie nicht doch in deiner Child-functions.php ganz gut aufgehoben findest.
    Wenn nicht, müssen wir weitersehen.
    Und im Theme einbinden kannst du die weiteren Widget-Bereiche ja dann, wo du willst, immer über if ( is_active_sidebar() )

    Gruß
    helix

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!