Inclure des fichiers dans le fichier des fonctions du thème enfant

8

Généralement, dans mon fichier de fonction de thème, j'aurai besoin d'autres fichiers pour garder les choses en ordre.

require_once("foo.php");

Travaillant maintenant dans un thème enfant, j'aimerais faire de même. J'ajoute des options d'administration personnalisées et il semble impossible d'inclure du code. J'ai répété le chemin pour m'assurer que j'appelle le bon fichier et qu'il appelle l'emplacement approprié, mais rien dans ce fichier ne semble fonctionner. Le code fonctionne correctement s'il est placé dans le fichier des fonctions du thème enfant.

Curtismchale
la source
Pouvez-vous s'il vous plaît poster un peu plus de votre code pour montrer exactement ce que vous faites?
MikeSchinkel

Réponses:

13

Les thèmes enfants font référence aux thèmes parents par nom de répertoire, et dans une installation normale, tous vos thèmes vivent wp-content/themes/, donc je dirais que c'est bien de référencer ces thèmes par leur chemin relatif:

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

Si cela vous met mal à l'aise, j'observe les constantes suivantes dans WordPress 3.0.1 avec un thème de vingt-deux enfants appelé tt-child :

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

Vous pouvez donc faire ce qui suit dans votre thème enfant pour référencer le répertoire du thème parent:

include TEMPLATEPATH . '/some-file.php';
Annika Backstrom
la source
Le STYLESHEETPATH ​​constant est ce que je cherchais. Inclut le travail dans un thème enfant si vous l'utilisez.
Curtismchale
Je suis vraiment surpris que vous puissiez même envisager d'utiliser un chemin codé en dur ... un thème n'est pas censé fonctionner uniquement dans un seul environnement. Je pourrais comprendre si get_template_directory () n'existait pas ... mais il existe. Je viens de réaliser que c'est une question de 2010 lol
Christian
L'option supérieure n'a pas fonctionné pour moi. Je ne sais pas pourquoi quand j'ai certainement eu le bon chemin relatif vers le fichier parent. La deuxième option a fonctionné pour moi, alors merci.
bowlerae
12

Dans un thème enfant, la bonne façon est

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

Dans le thème parent, vous pouvez toujours utiliser

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

get_template_directory()fonctionne toujours dans le thème enfant, ciblez malheureusement le répertoire du thème parent. Dans votre cas, c'est utile

Christian
la source
1
J'ai dû utiliser un '/' par exemple require_once (get_stylesheet_directory (). '/Foo.php');
ssaltman
merci @ssaltman. Vous avez raison, la documentation le confirme: developer.wordpress.org/reference/functions/… J'ai édité ma réponse
Christian
2

salut @curtismchale :

Je ne sais pas si c'est le cas ou non, mais vous devez inclure des guillemets foo.php , comme ceci:

require_once('foo.php');

Est-ce que cela résout votre problème?

MikeSchinkel
la source
Ha bonne note. Je l'ai manqué ici mais je l'avais dans le thème enfant.
Curtismchale
2

Utilisez <?php get_template_part( 'name-the-page-here' ); ?>. Sans l'extension .php

Everaldo Matias
la source
2

Vous ne voulez certainement pas coder en dur l'URL. La bonne façon de le faire est

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

Voir plus d'informations sur Wordpress Codex

Maintenant, si par exemple vous modifiez header.php qui a une inclusion, vous la référencerez comme suit:

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

Il est tout à fait possible et normal de le faire functions.php.

Je le fais comme ça dans mon thème enfant ( phpc'est un sous-répertoire pour le code):

include 'php/core.php';

Si vous avez des problèmes sans raison apparente, essayez d'activer le mode débogage dans wp-config.php:

define('WP_DEBUG', true);

Des erreurs pertinentes peuvent se produire, mais ne s'affichent pas.

Rarst
la source