web-dev-qa-db-fra.com

Comment supprimer un fichier inclus dans le thème parent avec Locate_template () via un thème enfant?

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.

1
JPollock

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.

2
gmazzap

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;
});
1
fuxia

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( ... );
}
0
Milo