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.


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';

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


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?


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


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' );

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.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.