WordPress : get_stylesheet_directory() vs get_template_directory() pour le thème enfant

Publié par Jean-Michel le

Disons que j’ai le fichier suivant dans mon dossier de thème parent :'theme-folder/inc/custom.php'

Ensuite, j’ai créé un thème enfant.

Comment puis-je vérifier si ce fichier existe dans le thème enfant, puis le récupérer, sinon le récupérer à partir du thème parent ?

get_template_directory()récupère toujours le fichier du thème parent.

While get_stylesheet_directory()exige que le fichier existe dans le thème enfant.

Solution n°1 trouvée

get_template_part()ferait cela, si je comprends votre question.

get_template_part('inc/custom');

Il est en quelque sorte conçu pour faire exactement cela, si je vous lis bien:

Permet à un thème de réutiliser facilement des sections de code et permet aux thèmes enfants de remplacer facilement des sections de leur thème parent.

Solution n°2 trouvée

locate_templatetentera de trouver le fichier spécifié dans le thème enfant, et reviendra au thème parent s’il n’existe pas :

locate_template('inc/custom.php', true);

Si vous définissez le deuxième paramètre sur true, il requiert le fichier au lieu de simplement déterminer le chemin.

Comme son nom l’indique, locate_templateest destiné au chargement de fichiers modèles. Il a une surcharge supplémentaire dont vous n’avez probablement pas besoin pour charger les bibliothèques. Une version allégée serait :

function load_theme_file($path) {
    if ( file_exists( STYLESHEETPATH . '/' . $path )) {
        include( STYLESHEETPATH . '/' . $path );
    } else {
        require( TEMPLATEPATH . '/' . $path );
    }
}

Usage:

load_theme_file('inc/custom.php');

Edit : Je voulais juste fournir une note rapide sur les problèmes potentiels avec cette approche globale.

Laisser un thème enfant remplacer les fichiers fonctionne bien pour les modèles, mais pour les bibliothèques, il y a plus de place pour l’erreur. Si un thème enfant doit modifier une seule fonction, vous devrez copier l’intégralité de ce fichier, en remplaçant toutes les fonctions de ce fichier dans le processus.

Si le thème parent est mis à jour et que des modifications ont été apportées à l’une des fonctions du fichier écrasé, cela peut entraîner des problèmes. Vous pouvez atténuer ce problème en divisant vos bibliothèques en plus petits morceaux, mais cela peut rendre votre base de code plus difficile à maintenir.

Une meilleure solution, à mon avis, est d’utiliser une approche orientée objet. Autorisez un thème enfant à étendre les classes que vous définissez, puis utilisez la classe du thème enfant. Dans les classes d’implémentation, le thème enfant n’aurait qu’à définir les méthodes qu’il doit écraser. Dans le thème parent, vous pouvez spécifier quelles méthodes ne doivent pas être écrasées en les rendant final.

Vous pouvez également atténuer la nécessité pour les thèmes enfants de remplacer des fichiers entiers en utilisant généreusement des filtres et des actions.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *