web-dev-qa-db-fra.com

Remplacez get_template_part ('partials/post', 'sidebar'); sans plugin

Je travaille sur un site pour un client qui a créé un thème pour lui par un développeur différent. Ils m'ont demandé d'apporter des modifications au site, et j'aimerais mettre toutes mes modifications dans un plugin par courtoisie envers le développeur du thème d'origine. Jusqu'ici, c'est simple avec les fonctions et CSS. Maintenant, je dois changer un fichier de thème. En gros, j'aimerais remplacer un fichier de thème par un autre que j'ai fortement modifié.

Dans le thème, le fichier que je voudrais remplacer s'appelle avec ceci:

get_template_part( 'partials/post', 'sidebar' );

Ce que j'aimerais faire, c'est en quelque sorte écrire une fonction dans mon plug-in qui capture l'instruction ci-dessus et redirige cette demande de modèle vers un fichier qui réside dans mon répertoire de plug-in.

Je ne sais absolument pas comment faire cela, et la recherche n'a jusqu'à présent apporté que très peu d'aide. Est-ce possible?

5
WilliamAlexander

TL; DR: Utilisez un thèmeenfantà la place :)


Si nous creusons dans le code pour get_template_part () , il y a là une action - get_template_part_{$slug} - à laquelle nous pourrions nous accrocher.

En creusant un peu plus loin, get_template_part () appelle Locate_template () , qui appelle load_template () . Malheureusement, aucune de ces fonctions ne semble pouvoir être connectée. Nous ne pouvons donc rien changer (à l'exception de pouvoir définir des variables via l'appel à extract () dans load_template () .... mais nous ne pouvons pas remplacer le fichier de modèle appelé, ce n'est donc pas très utile!)

Donc, il semble que votre seule option pour y remédier soit en exécutant du code sur l'action get_template_part_partials/post. Le problème est que cela ne vous permettra pas de filtrer le modèle appelé - cela vous permettra simplement d'exécuter du code when le modèle est appelé. Si tout ce que vous voulez faire est d’ajouter une sortie ci-dessus le code basé sur un modèle, cela vous conviendra parfaitement, mais je doute que ce soit tout ce que vous souhaitiez faire!

La solution consiste à utiliser un thème enfant .

Vous avez dit que vous vouliez mettre votre code dans un plugin afin de respecter le développeur de thème original. Tout d'abord, ce respect est génial - de nombreux développeurs s'en moquent bien et je vous en félicite!

Cependant, un plugin est-il le meilleur choix? Les plugins sont généralement utilisés pour ajouter des fonctionnalités modulaires à un site, pas pour en changer l'apparence. C'est le domaine des thèmes.

Vous pouvez en fait créer un thème enfant qui vous permettra de modifier le thème utilisé par le site sans apportant des modifications au thème parent. Vous devriez pouvoir appliquer toutes les modifications que vous avez déjà faites ici. De plus, vous avez le bonus que get_template_part () utilisera automatiquement un fichier dans votre thème enfant s'il existe}, avant de revenir au parent. thème.

3
Tim Malone