J'ai le problème que je dois charger le functions.php
fichier de mon thème parent avant le chargement du fichier de mon thème enfant functions.php
. Cela est nécessaire pour la procédure de configuration et d'initialisation. J'ai regardé les crochets à l'intérieur de /wp_core_root/wp-settings.php (nommé:) do_action('setup_theme');
.
Le problème est que je ne sais pas comment s'y connecter, car le premier fichier que je reçois est celui du thème enfant functions.php
, donc ça ne add_action( 'setup_theme', 'my_init_function' );
marchera pas.
Edit:
a) Je sais que les plugins se chargent plus tôt que le thème et peuvent donc accéder même à la requête initiale, mais je ne veux pas compter sur un plugin.
b) Voici le code (raccourci) du fichier wp-settings.php
// happens a lot earlier:
do_action( 'plugins_loaded' );
// localize stuff happening here
do_action( 'setup_theme' );
// Load the functions for the active theme, for both parent and child theme if applicable.
if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( STYLESHEETPATH . '/functions.php' ) )
include( STYLESHEETPATH . '/functions.php' );
if ( file_exists( TEMPLATEPATH . '/functions.php' ) )
include( TEMPLATEPATH . '/functions.php' );
// first available hook, *after* functions.php was loaded
do_action( 'after_setup_theme' );
Je veux éviter deux choses: d'abord beaucoup d'explications aux utilisateurs. Deuxièmement, la chance que quelqu'un casse quoi que ce soit si la corde coupe en supprimant accidentellement la procédure d'initiation des parents. Les gens doivent simplement jouer à l'intérieur du functions.php sans risquer de casser quoi que ce soit sans le savoir.
En d'autres termes: comment garder mon fichier de thèmes enfants functions.php propre, mais le bootstrap des thèmes parents est-il fait?
Des idées? Merci beaucoup!
functions.php
. Jetez un oeil auwp-settings.php
fichier "molto loko" dans le noyau (ligne: 275-279 @wp 3.1 rc) ... ressemble à ceci:,if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( STYLESHEETPATH . '/functions.php' ) ) include( STYLESHEETPATH . '/functions.php' ); if ( file_exists( TEMPLATEPATH . '/functions.php' ) ) include( TEMPLATEPATH . '/functions.php' );
donc je ne vois aucune chance ... Et je ne veux pas utiliser un plugin pour bootstrap mon thème.include(/path/to/parent/themes/functions.php)
en haut de votre thème enfant functions.php, alors tout y est chargé avant. Ne pas?Réponses:
Justin Tadlock a récemment écrit un excellent article sur la création d'un meilleur fichier functions.php
où (si je me souviens bien), il traite de ce problème exact.
Malheureusement, son site est en panne pour le moment, je dois donc compter sur ma mémoire pour l'instant.
Vous êtes sur la bonne voie avec le
after_setup_theme
crochet.Voir l'exemple ci-dessous.
functions.php
fichiers parents et enfants .Un peu de code valant mille mots - le thème de votre parent
function.php
devrait ressembler à ceci:la source
after_setup_theme
est trop tard, car les fichiers functions.php étaient déjà chargés.Premièrement, vous ne pouvez pas. Le thème enfant functions.php se charge toujours en premier, point.
Deuxièmement, les thèmes ne peuvent pas s'accrocher à setup_theme. Les plugins le peuvent, mais la première chose à laquelle un thème peut s'accrocher est after_setup_theme.
Si votre parent est conçu correctement, l'enfant est capable de remplacer les fonctions et les éléments du parent, mais uniquement lors du premier chargement.
D'une manière générale, si vous pensez que vous devez d'abord charger le fichier de fonctions du parent, vous vous trompez probablement, d'une manière ou d'une autre. Vous devez expliquer le problème plus large.
la source
after_setup_theme
hook? Juste pour ne pas "spammer" le crochet, ou parce que c'est plus "entreprenant" ou "kool" euh? Je veux dire: est-ce que l'idée de "meilleure pratique" derrière les crochets parallèles spécifiques au thème "laisse les crochets de base pour les plugins"? (C'est comme ça que je le gère actuellement.)Vous essayez donc d'exécuter du code à partir du fichier functions.php de l'enfant, mais après le chargement du thème parent. Simple, utilisez simplement une action personnalisée:
À la fin de
parent/functions.php
:Dans
child/functions.php
:Tous les thèmes parent qui valent leur sel le font de cette façon. De plus, ils ont plusieurs autres actions et filtres pour le thème enfant à utiliser.
la source
Pourquoi ne pas inclure le
functions.php
fichier du thème parent dans le fichier du thème enfantfunctions.php
, comme ceci:Dans le
functions.php
fichier du thème enfant :De cette façon, le
functions.php
fichier du thème parent n'est pas modifié (parfois c'est important).la source
J'ai eu un problème similaire auparavant et je le corrige en créant un "child-functions.php" supplémentaire vide dans le parent et en l'incluant dans "functions.php" (le parent aussi) juste après les fichiers / fonctions que je veux utiliser chez l'enfant, puis dans le thème enfant, je crée un fichier "child-functions.php" et c'est là que je peux commencer à simuler l'enfant functions.php exécuté après que le parent n'est pas une solution élégante mais a fait le travail.
la source