Fügen Sie Dateien in die Funktionsdatei für untergeordnete Themen ein

8

Normalerweise benötige ich in meiner Themenfunktionsdatei andere Dateien, um die Dinge ordentlich zu halten.

require_once("foo.php");

Jetzt arbeite ich in einem untergeordneten Thema und möchte dasselbe tun. Ich füge benutzerdefinierte Administratoroptionen hinzu und es scheint unmöglich, Code einzuschließen. Ich habe den Pfad wiederholt, um sicherzustellen, dass ich die richtige Datei aufrufe und den richtigen Speicherort aufrufe, aber nichts in dieser Datei scheint zu laufen. Der Code läuft einwandfrei, wenn er in der Funktionsdatei des untergeordneten Themas platziert wird.

Curtismchale
quelle
Können Sie bitte etwas mehr von Ihrem Code posten, um genau zu zeigen, was Sie tun?
MikeSchinkel

Antworten:

13

Untergeordnete Themen verweisen auf übergeordnete Themen nach Verzeichnisnamen, und in einer normalen Installation leben alle Ihre Themen in wp-content/themes/. Daher würde ich sagen, dass es in Ordnung ist, diese Themen anhand ihres relativen Pfads zu referenzieren:

include '../parent-theme/some-file.php';

Wenn Sie sich dadurch unwohl fühlen , beobachte ich in WordPress 3.0.1 die folgenden Konstanten mit einem zwanzigfachen untergeordneten Thema namens tt-child :

TEMPLATEPATH     /home/adam/public_html/wp3/wp-content/themes/twentyten
STYLESHEETPATH   /home/adam/public_html/wp3/wp-content/themes/tt-child

Sie können also in Ihrem untergeordneten Thema Folgendes tun, um auf das übergeordnete Themenverzeichnis zu verweisen:

include TEMPLATEPATH . '/some-file.php';
Annika Backstrom
quelle
Das konstante STYLESHEETPATH ​​ist das, wonach ich gesucht habe. Schließt Arbeit in ein untergeordnetes Thema ein, wenn Sie das verwenden.
Curtismchale
Ich bin wirklich überrascht, dass Sie sogar in Betracht ziehen könnten, einen fest codierten Pfad zu verwenden ... ein Thema sollte nicht nur in einer Umgebung funktionieren. Ich könnte verstehen, wenn get_template_directory () nicht existiert ... aber es existiert. Ich habe gerade festgestellt, dass es eine Frage von 2010 lol
Christian
Die Top-Option hat bei mir nicht funktioniert. Ich bin mir nicht sicher warum, als ich mit Sicherheit den richtigen relativen Pfad zur übergeordneten Datei hatte. Die zweite Option hat bei mir funktioniert, also danke.
bowlerae
12

In einem Kinderthema ist der richtige Weg

require_once( get_stylesheet_directory() . '/foo.php');

Während Sie sich im übergeordneten Thema befinden, können Sie es weiterhin verwenden

require_once ( get_template_directory() . '/foo.php' );

get_template_directory()funktioniert immer noch im untergeordneten Thema, zielt leider auf das übergeordnete Themenverzeichnis ab. In deinem Fall ist es nützlich

Christian
quelle
1
Ich musste ein '/' verwenden, z. B. require_once (get_stylesheet_directory (). '/Foo.php');
Ssaltman
danke @ssaltman. Sie haben Recht, die Dokumentation bestätigt dies: developer.wordpress.org/reference/functions/… Ich habe meine Antwort bearbeitet
Christian
2

Hallo @curtismchale :

Ich weiß nicht, ob dies der Fall ist oder nicht, aber Sie müssen Anführungszeichen foo.phpwie folgt einfügen :

require_once('foo.php');

Löst das Ihr Problem?

MikeSchinkel
quelle
Ha gute Nachricht. Ich habe es hier verpasst, aber ich hatte es im Kinderthema.
Curtismchale
2

Verwenden Sie <?php get_template_part( 'name-the-page-here' ); ?>. Ohne die Erweiterung .php

Everaldo Matias
quelle
2

Sie möchten die URL definitiv nicht fest codieren. Der richtige Weg, dies zu tun, ist

require_once( get_stylesheet_directory(). '/my_included_file.php' );

Weitere Informationen finden Sie unter Wordpress Codex

Wenn Sie beispielsweise die Datei header.php ändern, die ein Include enthält, verweisen Sie wie folgt darauf:

require_once( get_stylesheet_directory() . '/../parenthteme/my_included_file.php' );
Marlyse Comte
quelle
0

Es ist durchaus möglich und normal, Einschlüsse in zu machen functions.php.

Ich mache es so in meinem phpuntergeordneten Thema ( ist Unterverzeichnis für Code):

include 'php/core.php';

Wenn Sie Probleme ohne ersichtlichen Grund haben, aktivieren Sie den Debug-Modus in wp-config.php:

define('WP_DEBUG', true);

Möglicherweise treten relevante Fehler auf, die jedoch nicht angezeigt werden.

Selten
quelle