web-dev-qa-db-fra.com

Les dossiers de thèmes internes personnalisés peuvent-ils être remplacés par des thèmes enfants?

En gros, j'essaie de remplacer certains fichiers du thème Uncode. Mais ce n’est pas une question spécifique à un thème: elle peut être appliquée à n’importe quel thème. Le thème Uncode a un répertoire personnalisé 'partials' (/uncode/partials/) qui contient des éléments de présentation. Sur mon thème enfant, j'ai également créé un dossier 'partiels' (my-child-theme/partials), mais les fichiers internes ne semblent pas être remplacés. Est-ce normal? Les documents WP indiquent que tout fichier du même nom devrait pouvoir être remplacé, mais il semble que ce ne soit pas vrai. Est-ce que je fais quelque chose de mal?

3
Luca Reghellin

Cela dépend entièrement du thème parent. Tandis que WordPress vérifie le thème enfant pour les modèles dans la hiérarchie des modèles et les utilise s’ils sont présents, il appartient aux auteurs de thème de décider du niveau de remplacement par les thèmes enfants qu’ils souhaitent prendre en charge pour d’autres fichiers en dehors de celui-ci hiérarchie.

Par exemple, lorsqu'il inclut des parties de modèle, l'auteur du thème peut utiliser:

require 'partials/partial.php';

Et cela fonctionnerait bien, mais si l'auteur du thème voulait soutenir la thématisation des enfants, il l'utiliserait:

get_template_part( 'partials/partial' );

Ceci est dû au fait que get_template_part() recherchera partials/partial.php dans le thème enfant et l’utilisera s’il existe, sinon il retombera sur la copie de partials/partial.php du thème parent.

Depuis la version 4.7.0, WordPress a ajouté plusieurs fonctions permettant aux auteurs de thèmes de prendre en charge la thématique enfant pour d’autres fichiers.

get_theme_file_uri() renverra une URL pour un fichier du thème enfant s'il existe, sinon il utilisera les thèmes parent. Cela permet aux thèmes de prendre en charge le remplacement des fichiers CSS et JS dans les thèmes enfants.

Par exemple, si le thème parent met en feuille une feuille de style comme ceci:

wp_enqueue_style( 'custom-style', get_theme_file_uri( 'assets/custom.css' ) );

Ensuite, un auteur de thème enfant peut remplacer cette feuille de style en plaçant simplement assets/custom.css dans son thème enfant.

get_theme_file_path() renverra le chemin pour un fichier du thème enfant s'il existe, sinon il utilisera les thèmes parent. Cela peut être utilisé par les thèmes parents pour permettre aux thèmes enfants de remplacer l'intégralité des fichiers inclus PHP.

Par exemple, si le thème parent incluait un fichier PHP comme ceci:

include get_theme_file_path( 'inc/template-tags.php' );

Ensuite, un auteur de thème enfant pourrait remplacer template-tags.php en plaçant simplement inc/template-tags.php dans son thème enfant.

Il convient donc de retenir que WordPress prend en charge prend en charge les thèmes enfants remplaçant des fichiers arbitraires de leur thème parent, mais l'auteur du thème parent doit le prendre en charge de manière explicite à l'aide des fonctions appropriées.

Le code est un thème payant, je ne peux donc pas voir le code, mais je suppose qu'il n'utilise pas get_template_part(). C'est pourquoi vous ne pouvez pas remplacer les fichiers de votre thème enfant. Les thèmes payants ne sont souvent pas de bons "citoyens WordPress" et ont un support assez inégal pour des fonctionnalités comme celle-ci.

2
Jacob Peattie

C'est une très bonne question, le répertoire theme peut parfois être assez déroutant.

La réponse est non, WordPress ne s'intéresse qu'aux fichiers de thème principaux. Puisqu'un sous-répertoire ne fait pas partie de cela, il ne cherchera pas de sous-dossiers dans votre thème enfant. Ce que vous pouvez faire est d'inclure le fichier qui inclut le dossier Partials et qui inclura votre dossier Partials personnalisé dans votre thème enfant.

0
weston deboer