Dans mon thème, j'utilise locate_template()
pour charger les différentes parties de la bibliothèque de fonctions. Je cherche un moyen de ne pas inclure l'un de ces fichiers lorsque vous utilisez un thème enfant. J'ai essayé d'ajouter locate_template('same_file_name.php', false);
au functions.php de mon thème enfant, mais il est toujours inclus.
ÉDITION DE CLARIFICATION: je ne veux pas empêcher que ce fichier soit utilisé par des thèmes enfants. En général, je souhaite que ce fichier soit inclus lorsque j'utilise un thème enfant. Je cherche quelque chose à ajouter à un thème enfant lorsque je ne veux pas l'utiliser.
Une solution alternative qui s’inspire des deux réponses de @ Milo et de @ toscho .
créez votre propre fonction pour charger le modèle, par exemple.
if ( ! function_exists('my_locate_template') ) {
function my_locate_template( $template = '', $load = false, $once = true ) {
$filtered = apply_filters('allow_child_load_' . $template, true);
if ( ! is_child_theme() || $filtered ) return locate_template($template, $load, $once);
return false;
}
}
Ensuite, dans votre thème parent, chargez les fichiers en utilisant my_locate_template('same_file_name.php')
.
De cette manière, vos fichiers seront toujours chargés dans le thème parent et, lorsque vous utilisez un thème enfant, vous pouvez utiliser le filtre pour exclure certains fichiers.
add_filter('allow_child_load_disallow-this.php', '__return_false');
et après cela, le fichier disallow-this.php
ne sera pas chargé dans ce thème enfant.
Notez également que la fonction est encapsulée dans if (! function_exists('my_locate_template') ) {
. Par conséquent, si vous le souhaitez, vous pouvez la remplacer complètement dans un thème enfant.
Simple, flexible et avec des valeurs par défaut confortables.
Vous pouvez proposer un filtre pour ces fichiers dans votre thème parent. Ensuite, vous pouvez décider séparément dans chaque thème enfant quels fichiers doivent être chargés:
$files_to_include = array(
'foo.php',
'bar.php'
);
$files_to_include = apply_filters(
get_template() . '_files_to_include',
$files_to_include
);
if ( ! empty ( $files_to_include ) )
{
foreach ( $files_to_include as $file )
locate_template( $file );
}
Dans un thème enfant, vous pouvez maintenant supprimer certains fichiers de ce tableau:
add_filter( get_template() . '_files_to_include', function( $files )
{
$bar_key = array_search( 'bar.php', $files );
if ( FALSE !== $bar_key )
unset( $files[ $bar_key ] );
return $files;
});
Vous pouvez encapsuler l'appel locate_template
dans une vérification de is_child_theme
dans votre thème parent afin qu'il soit ignoré:
if( ! is_child_theme() ){
locate_template( ... );
}