web-dev-qa-db-fra.com

Les enfants PHP fichiers n'écrasant pas les parents PHP des dossiers

J'ai un fichier php situé à:

.../wp-content/themes/kallyas-child/pagebuilder/elements/TH_TeamBox/TH_TeamBox.php

J'essaie d'utiliser le fichier ci-dessus pour écraser le fichier TH_TeamBox.php du parent qui se trouve ici:

.../wp-content/themes/kallyas/pagebuilder/elements/TH_TeamBox/TH_TeamBox.php

Mon thème enfant est actif et j'ai créé le chemin de fichier dans mon thème enfant pour imiter mon thème parent. J'avais l'impression que si je le faisais, je serais capable de modifier les fichiers PHP à mon goût dans mon thème enfant sans perdre mes modifications lors de la mise à jour de mon thème parent.

Je développe depuis un certain temps, mais comme vous pouvez le constater, je suis plus récent que Wordpress. Toute idée sur la raison pour laquelle le fichier .php de mon enfant ne remplace pas le fichier .php de son parent serait grandement appréciée. Je serais heureux de donner plus d'informations que vous pourriez avoir besoin de m'aider, merci! :)

2
domdambrogia

Les thèmes enfants sont autorisés à remplacer templates , pas simplement les fichiers PHP arbitraires.

Dans WordPress, un thème est constitué d'un ensemble de PHP fichiers utilisés comme modèles. Vous pouvez trouver une liste de ces fichiers dans Hiérarchie des modèles .

Ces fichiers de modèles spécifiques peuvent être remplacés par de nouveaux, mais à moins que le thème parent ne dispose de moyens spéciaux pour remplacer d'autres fichiers, les fichiers simplement inclus par le parent en tant que partie d'une structure de support ou en tant que bibliothèques pour un élément de code pagebuilder ne peuvent pas simplement être annulé de cette manière.

8
Otto

La solution consiste à transférer les modifications requises dans votre thème enfant functions.php file.

S'il s'agit d'une fonction, il y aura généralement une instruction if qui vérifie si elle est déjà déclarée. Dans ce cas, vous pouvez copier la fonction dans le fichier functions.php avec le même nom et effectuer les modifications requises. reste des fichiers de thème. Si la fonction a été déclarée sans instruction if, vous devez changer son nom dans functions.php , trouver le fichier de modèle appelé, appeler le dans le thème et changer l'appel de fonction dans il.

S'il s'agit d'un widget, copiez la déclaration de classe entière dans functions.php , modifiez son nom et apportez les autres modifications. Assurez-vous également d'enregistrer le nouveau widget et vous le trouverez disponible dans la zone des widgets avec le nouveau nom et les modifications.

0
Patriot

J'ai une solution de contournement qui pourrait être préférable à la simple écriture de modifications dans les fichiers de thème parent, ce qui n'est évidemment pas souhaitable pour les raisons mentionnées par Otto.

Si vous ajoutez ces deux lignes de PHP en haut d'un fichier dont vous souhaitez utiliser une copie modifiée dans la structure de répertoires de votre thème enfant:

<?php
    $filepath = str_replace(get_option('template'), get_option('stylesheet'), __FILE__);
    if (file_exists($filepath)) {include($filepath); return;}
?>

Bien sûr, vous devrez toujours répéter cette opération pour chaque fichier après la mise à niveau du thème. La recommandation est donc de prenez note de ces fichiers et ne mettez probablement plus le thème directement à jour, mais téléchargez plutôt. , ajoutez ces lignes localement et téléchargez la copie mise à jour par FTP.

Cela peut sembler inutile, mais cela vous permettrait de conserver vos fichiers modifiés personnalisés ensemble dans la structure de votre thème enfant et de ne pas être écrasés par aucune mise à jour de thème. Encore une fois, il vous suffit de rajouter ces lignes en haut de tout fichier parent que vous souhaitez continuer à remplacer.

Cela signifie également que vous pouvez remove copier le fichier de fonctions enfant modifié sans casser votre site (par exemple, pour tester un fichier de thème mis à jour, par exemple) - car cela se replierait sur le fichier d'origine si une copie modifiée n'était pas a trouvé.

(CEM Typo Edit: a remplacé le premier appel get_options par get_option.)

0
majick