web-dev-qa-db-de.com

Können benutzerdefinierte innere Themenordner in irgendeiner Weise von untergeordneten Themen überschrieben werden?

Grundsätzlich versuche ich, einige Dateien des Uncode-Themas zu überschreiben. Dies ist jedoch keine themenspezifische Frage: Sie kann auf jedes Thema angewendet werden. Das Uncode-Design hat ein benutzerdefiniertes Verzeichnis 'partials' (/uncode/partials/), das einige Layoutelemente enthält. Bei meinem untergeordneten Thema habe ich auch einen Ordner 'partials' erstellt (my-child-theme/partials), aber die inneren Dateien scheinen nicht überschrieben zu werden. Es ist normal? WP Dokumente sagen, dass jede Datei mit dem gleichen Namen überschrieben werden sollte, aber es scheint, dass das nicht wahr ist. Mache ich etwas falsch?

3
Luca Reghellin

Es hängt ganz vom übergeordneten Thema ab. Während WordPress das untergeordnete Thema auf Vorlagen in der Vorlagenhierarchie überprüft und diese verwendet, obliegt es den Autoren der Themen, zu entscheiden, wie viel Überschreiben durch untergeordnete Themen sie für andere Dateien außerhalb dieser Hierarchie unterstützen möchten.

Wenn der Autor beispielsweise Vorlagenteile einbezieht, kann er Folgendes verwenden:

require 'partials/partial.php';

Und das würde gut funktionieren, aber wenn der Autor des Themas das Kindermotiv unterstützen wollte, würde er Folgendes verwenden:

get_template_part( 'partials/partial' );

Dies liegt daran, dass get_template_part() das untergeordnete Thema auf partials/partial.php überprüft und verwendet, falls vorhanden, andernfalls auf die Kopie von partials/partial.php des übergeordneten Themas zurückgreift.

Seit 4.7.0 hat WordPress verschiedene Funktionen hinzugefügt, mit denen Autoren von Designs untergeordnete Designs für andere Dateien unterstützen können.

get_theme_file_uri() gibt eine URL für eine Datei im untergeordneten Design zurück, falls vorhanden, andernfalls werden die übergeordneten Designs verwendet. Auf diese Weise können Themen das Ersetzen von CSS- und JS-Dateien in untergeordneten Themen unterstützen.

Wenn das übergeordnete Thema beispielsweise ein Stylesheet wie folgt in die Warteschlange stellt:

wp_enqueue_style( 'custom-style', get_theme_file_uri( 'assets/custom.css' ) );

Dann kann ein Autor eines untergeordneten Themas dieses Stylesheet ersetzen, indem er einfach assets/custom.css in das untergeordnete Thema einfügt.

get_theme_file_path() gibt den path für eine Datei im untergeordneten Design zurück, falls vorhanden, andernfalls werden die übergeordneten Designs verwendet. Dies kann von übergeordneten Designs verwendet werden, damit untergeordnete Designs die gesamten enthaltenen PHP -Dateien ersetzen können.

Wenn das übergeordnete Thema beispielsweise eine PHP -Datei wie diese enthielt:

include get_theme_file_path( 'inc/template-tags.php' );

Dann könnte ein Autor eines untergeordneten Themas template-tags.php ersetzen, indem er nur inc/template-tags.php in sein untergeordnetes Thema einfügt.

Das Wichtigste dabei ist, dass WordPress does untergeordnete Designs unterstützt, die beliebige Dateien aus dem übergeordneten Design ersetzen. Der Autor des übergeordneten Designs muss dies jedoch explizit unterstützen, indem er die richtigen Funktionen verwendet.

Uncode ist ein kostenpflichtiges Thema, daher kann ich den Code nicht sehen, aber ich vermute, dass get_template_part() nicht verwendet wird. Aus diesem Grund können Sie die Dateien in Ihrem untergeordneten Thema nicht ersetzen. Bezahlte Themes sind oft keine guten WordPress-Bürger und unterstützen solche Funktionen nur sehr spärlich.

2
Jacob Peattie

Das ist eine sehr gute Frage, das Themenverzeichnis kann manchmal ziemlich verwirrend sein.

Die Antwort ist Nein, WordPress betrachtet nur Kernthemadateien. Da ein Unterverzeichnis nicht dazu gehört, sucht es in Ihrem untergeordneten Design nicht nach Unterordnern. Was Sie tun können, ist die Datei, die den Ordner partials enthält, und die Ihren benutzerdefinierten Ordner partials in Ihr untergeordnetes Thema einbezieht.

0
weston deboer