wake-up-neo.net

Dateien in untergeordnete Themen einbeziehen, in functions.php deklarieren

Ich verwende ein Kinderthema. Ich möchte eine Änderung an einer Datei vornehmen, in der sich derzeit Folgendes befindet:

mybasetheme> enthält> sf-content-display> sf-post-layouts.php

Also habe ich genau die gleiche Dateistruktur in mein untergeordnetes Design kopiert und die Datei kopiert:

mychildtheme> enthält> sf-content-display> sf-post-layouts.php

Aber es ist immer noch die Standardversion des Basisthemas?

Weil es sich in includes befindet, habe ich mich gefragt, ob es mit der Datei functions.php zu tun hat, die es aufruft. So habe ich eine neue functions.php-Datei in meinem untergeordneten Design wie folgt erstellt:

<?php

// Functions specific to child-theme

require_once( get_stylesheet_directory() . '/includes/sf-content-display/sf-post-formats.php' );

Aber jetzt sehe ich, dass das nie funktionieren wird, da das Basisthema functions.php es bereits aufruft:

>include(SF_INCLUDES_PATH . '/sf-content-display/sf-post-formats.php');

So bekomme ich diesen Fehler:

Kann sf_get_post_media () (zuvor deklariert in /Applications/MAMP/htdocs/syyco/wp-content/themes/flexform-child/includes/sf-content-display/sf-post-formats.php:15) in/Applications/nicht erneut deklarieren. MAMP/htdocs/syyco/wp-content/themes/flexform/includes/sf-content-display/sf-post-formats.php in Zeile 36

Also was mache ich? Ich kann das untergeordnete Thema nicht dazu bringen, meine neue Datei einzuschließen, ohne das Basisthema zu bearbeiten

1
Francesca

Wenn es um die Vorlagenhierarchie geht, wird WordPress in der Tat das untergeordnete Designverzeichnis durchsuchen, bevor es vom Hauptdesign geladen wird.

Für alle anderen unspezifischen WordPress-Dateien (wie Funktionen und Drittanbieter-Includes) liegt es ganz beim Hauptthema, zu entscheiden, wie sie geladen werden.

Sofern das Thema nicht locate_template zum Laden dieser Includes verwendet oder zuerst das Stylesheet-Verzeichnis (untergeordnetes Thema) überprüft, haben Ihre Dateiüberschreibungen im untergeordneten Thema keine Auswirkung.

Wenn die Funktionen in if ( ! function_exists( ... eingeschlossen sind, hat der Autor das Überschreiben zugelassen, und Sie können einfach Ihre eigene Version der Funktion in den functions.php Ihres untergeordneten Themas schreiben.

Sollte dies nicht der Fall sein, suchen Sie nach do_action( ... ) oder apply_filters( ... ) im Bereich des Codes, den Sie ändern möchten. Dies ist Ihre letzte Anlaufstelle für das Überschreiben des Standardverhaltens in Ihrem untergeordneten Thema (siehe Codex auf Haken ).

Wenn keine der oben genannten Optionen vom ursprünglichen Autor implementiert wurde, haben Sie zwei Möglichkeiten: Bearbeiten Sie das ursprüngliche Thema, oder wenden Sie sich an den Autor, und fordern Sie die Implementierung einer API für untergeordnete Themen an.

1
TheDeadMedic

Kurz gesagt, viele Theme-Autoren (auch ich) tendieren dazu, ihre Funktionen in kleineren, besser verwaltbaren Dateien außerhalb der normalen functions.php-Datei zu organisieren. Es erleichtert das Auffinden einer bestimmten Funktion und organisiert und gruppiert Funktionen, die sich auf einen bestimmten Aspekt der Site beziehen

Ein kurzes Beispiel:

In meinem Theme habe ich eine Datei namens comments-functions.php. In dieser Datei füge ich alle Funktionen hinzu, die sich auf den Kommentarbereich meines Themas beziehen.

Wie ich bereits sagte, wird dies alles getan, um Code am Ende des Tages zu organisieren, der 2000 Codezeilen nach einer bestimmten Funktion durchsuchen möchte.

Alle diese kleineren Funktionsdateien werden dann in der main functions.php aufgerufen, um sie für die Verwendung zu registrieren.

Wenn Sie ein untergeordnetes Thema erstellen, müssen Sie diese Dateistruktur nicht einhalten. Sie können einfach Funktionen in der Datei functions.php Ihres untergeordneten Themas hinzufügen/entfernen/ändern. Wenn Sie wirklich nur ein untergeordnetes Thema mit einer Funktion erstellen, erstellen Sie einfach eine Datei functions.php und fügen Sie dort Ihre Funktion hinzu

Die Datei functions.php eines untergeordneten Themas wird vor dem übergeordneten Thema geladen, sodass alle Funktionen, die in ein if(!function_exists('function_name'))-Bedingungs-Tag eingeschlossen sind, nur in ein untergeordnetes Thema kopiert und geändert werden können. Diese geänderte Funktion behält den Namen der übergeordneten Funktion. Die übergeordnete Funktion wird ignoriert, wenn sie geladen werden soll. Dies ist dieONLYtime eine Funktion kann neu deklariert werden, dh zwei Funktionen haben den gleichen Namen.

Wenn eine übergeordnete Funktion nicht umbrochen ist, haben Sie die folgenden Möglichkeiten

  • wenn die Funktion eigenständig ist, kopieren Sie sie in das untergeordnete Design, benennen Sie sie um und ändern Sie sie nach Bedarf. Diese Art von Funktion hat irgendwo einen Rückruf. Suchen Sie in den übergeordneten Vorlagen nach dieser Funktion, kopieren Sie diese spezifische Vorlage in Ihr untergeordnetes Design und ersetzen Sie den Namen der übergeordneten Funktion durch Ihre neue untergeordnete Funktion. Sie müssen sich keine Gedanken darüber machen, ob Sie die übergeordnete Funktion entfernen oder etwas damit tun. Beispiel: Wenn der Name des übergeordneten Themas parent_function() lautet und in index.php aufgerufen wird, kopieren Sie index.php in Ihr untergeordnetes Thema und ersetzen Sie parent_function() durch Ihre untergeordnete Funktion, beispielsweise child_function().

  • Wenn eine Funktion mit einer bestimmten Aktion oder einem bestimmten Filter verknüpft ist, müssen Sie diese Funktion entfernen, sobald sie registriert ist. Siehe Aktionen und Filter entfernen . Sie können jetzt eine neue Funktion registrieren und diese mit demselben Hook verknüpfen, mit dem das übergeordnete Theme verknüpft war. Denken Sie daran, Priorität ist hier sehr wichtig, die Ausführung der falschen Reihenfolge wird fehlschlagen.

1
Pieter Goosen

Ändern Sie einfach nur die Funktion, die Sie bearbeiten möchten. Siehe diesen Beitrag

1) Kopieren Sie die Funktion, die Sie überschreiben möchten, vollständig aus dem übergeordneten Thema.

2) Fügen Sie es in die Datei functions.php im Stammverzeichnis Ihres untergeordneten Themas ein. Wenn functions.php nicht existiert, erstelle es.

3) Benennen Sie die Funktion von parent_theme_function in child_theme_function um.

4) Deaktivieren Sie die übergeordnete Funktion.

5) Aktivieren Sie die untergeordnete Funktion.

0
Shail