get_template_directory_uri zeigt auf das übergeordnete Thema, nicht auf das untergeordnete Thema

35

Das Problem, das ich habe, ist, dass das get_template_directory_uri auf das übergeordnete Thema wie zeigt site/wp-content/themes/twentythirteen/myGallery/gallery_functions_include.php

aber ich möchte, dass es auf mein Kinderthema verweist, das sein sollte site/wp-content/themes/child-twentythirteen/myGallery/gallery_functions_include.php

was ich benutze ist include (TEMPLATEPATH . '/myGallery/gallery_functions_include.php');

Elroy Fernandes
quelle

Antworten:

70

get_template_directory_uri() Gibt immer den URI des aktuellen übergeordneten Themas zurück.

Um stattdessen die untergeordnete Design-URI abzurufen, müssen Sie verwenden get_stylesheet_directory_uri().

Sie finden diese in der Dokumentation zusammen mit einer Liste weiterer nützlicher Funktionen zum Abrufen verschiedener Verzeichnispfade für Themen.


Wenn Sie es vorziehen, eine Konstante zu verwenden, TEMPLATEPATHentspricht dies dem Aufruf get_template_directory()(dh dem übergeordneten Thema) und STYLESHEETPATHdem Aufruf get_stylesheet_directory()(dh dem untergeordneten Thema).

Diese Konstanten werden vom WordPress-Kern in gesetzt wp-includes/default-constants.phpund sehen im Grunde so aus:

define('TEMPLATEPATH', get_template_directory());
...
define('STYLESHEETPATH', get_stylesheet_directory());

Wenn es kein untergeordnetes Thema gibt, geben sowohl die Funktionen "Vorlage" als auch "Stylesheet" den Speicherort des übergeordneten Themas zurück.

Beachten Sie den Unterschied zwischen diesen Funktionen und den Funktionen, die auf enden _uri- diese geben den absoluten Serverpfad (z. B. /home/example/public_html/wp-content/yourtheme) zurück, während die _uriFunktionen die öffentliche Adresse (auch als URL bezeichnet) zurückgeben - z. http://example.com/wp-content/themes/yourtheme.

Tim Malone
quelle
was ist mit include (TEMPLATEPATH. '/myGallery/gallery_functions_include.php'); Dieser geht auch zum übergeordneten Verzeichnis
Elroy Fernandes
@ ElroyFernandes Ich habe dies zu meiner Antwort hinzugefügt. STYLESHEETPATH ​​ist die Konstante, die Sie stattdessen möchten
Tim Malone
2
Vielen Dank für die Beantwortung der Frage, anstatt nur RTM zu sagen. Dies tauchte zuerst in meinen Suchergebnissen auf.
Rinogo
2
Gute Antwort, aber schlechte Benennung von WordPress - es ist nicht nur für Stylesheets, es ist für JS, Assets, enthält usw.
Paul Feakins
1
@PaulFeakins Beginnen Sie nicht damit, Inkonsistenzen in WordPress zu benennen - das ist ein langer und kurviger Weg, der dahin führt, wer weiß, wohin! ;)
Tim Malone
0

Sie sollten Ihre benutzerdefinierten Vorlagen, die nicht vom aktiven Thema gesteuert werden, in einen untergeordneten Ordner verschieben.

Halten Sie das Design von allen benutzerdefinierten Dateien getrennt, damit das Design aktualisiert werden kann, ohne dass Ihre benutzerdefinierte Arbeit verloren geht.

Ihr Out-of-the-Box-Thema lebt hier
------------------------------------
\\ Site \ wp-content \ themes \ some_theme
Ihr Kinderthema lebt hier
---------------------------
\\ Site \ wp-content \ themes \ some_theme-child

Ihre benutzerdefinierten Stile und Vorlagen sowie alle Ihre Includes (z. B. benutzerdefiniertes JavaScript, Bilder, die nicht in WP gespeichert sind, benutzerdefinierte Schriftarten, JSON-Datendateien und Plugins, die Sie möglicherweise in die Warteschlange stellen) sollten in den untergeordneten Ordner AUSSERHALB des Themas verschoben werden.

\ themes \ some_theme
\ themes \ some_theme-child \ (alle Ihre benutzerdefinierten PHP-Vorlagendateien hier)
\ themes \ some_theme-child \ images
\ themes \ some_theme-child \ includes 
\ themes \ some_theme-child \ languages
\ themes \ some_theme-child \ json 
\ themes \ some_theme-child \ style

Für Ihre benutzerdefinierten Stilseiten ( nicht das überschriebene style.css des Themas ) erstellen Sie eine Enqueue mit wp_enqueue_style ('some-css', get_stylesheet_directory () . '/Style/some.css', false, '0.0.1', 'all');

Verwenden Sie get_stylesheet_directory_uri () für Ihre xhr-Aufrufe usw.

Greg Bologna
quelle