Fișierele PHP din tema copil nu suprascriu fișierele PHP din tema părinte
Am un fișier php localizat la:
.../wp-content/themes/kallyas-child/pagebuilder/elements/TH_TeamBox/TH_TeamBox.php
Încerc să folosesc fișierul de mai sus pentru a suprascrie fișierul TH_TeamBox.php din tema părinte care se găsește aici:
.../wp-content/themes/kallyas/pagebuilder/elements/TH_TeamBox/TH_TeamBox.php
Tema mea copil este activă și am creat calea fișierului în tema copil pentru a imita tema părinte. Credeam că dacă fac acest lucru voi putea edita fișierele PHP după bunul plac în tema copil fără să-mi pierd modificările când actualizez tema părinte.
Dezvolt de ceva vreme, dar după cum puteți vedea sunt mai nou(ă) în WordPress. Orice informație despre motivul pentru care fișierul .php din tema copil nu suprascrie fișierul .php din tema părinte ar fi foarte apreciată. Aș fi bucuros(oasă) să ofer orice altă informație de care ați putea avea nevoie pentru a mă ajuta, mulțumesc! : )

Temele copil pot suprascrie șabloanele, nu doar fișiere PHP arbitrare.
În WordPress, o temă este formată dintr-un set de fișiere PHP care sunt folosite ca Șabloane. Puteți găsi o listă cu aceste fișiere în Ierarhia Șabloanelor.
Acele fișiere șablon specifice pot fi suprascrise cu altele noi, dar dacă tema părinte nu are mecanisme speciale pentru a suprascrie alte fișiere, atunci fișierele incluse pur și simplu de către părinte ca parte a unei structuri de suport sau ca biblioteci pentru o bucată de cod a unui constructor de pagini nu pot fi suprascrise în acest mod.

Nu era ceea ce voiam să aud, dar mulțumesc pentru informație. Apreciez asta.

Aici sunt menționate o serie de funcții utile care ajută la suprascrierea fișierelor unei teme părinte. (Totuși, este necesară o mică modificare în fișierul temei părinte. Din câte știu, este imposibil să evităm 100% acest lucru.) Verificați acestea: locate_template()
, get_theme_file_path()
.

Soluția este să mutați modificările necesare în fișierul functions.php al temei child.
Dacă este vorba despre o funcție, de obicei va exista o instrucțiune if care verifică dacă este deja declarată. În acest caz, puteți copia funcția în functions.php cu același nume și faceți modificările necesare - aceasta va avea prioritate față de celelalte fișiere ale temei. Dacă funcția a fost declarată fără o instrucțiune if, atunci trebuie să-i schimbați numele în functions.php, să găsiți fișierul template unde este apelată funcția, să-l copiați în tema child și să modificați apelul funcției în acel fișier.
Dacă este vorba despre un widget, copiați întreaga declarație de clasă în functions.php, schimbați-i numele și faceți celelalte modificări. Asigurați-vă că înregistrați noul widget și îl veți găsi disponibil în zona de widget-uri cu noul nume și modificările aduse.

Mulțumesc pentru contribuția ta. La momentul întrebării, nu căutam cum să suprascriu o funcție, ci mai degrabă cum să suprascriu un fișier. De asemenea, răspunsul corect a fost oferit de Otto. Cu excepția cazului în care există o funcție de șablon personalizată pe care o poți filtra (cum ar fi wc_get_template din WooCommerce), doar fișierele principale de șablon (header.php, footer.php, page.php etc.) pot fi suprascrise.

Am o soluție pentru tine care poate fi mai bună decât simpla modificare a fișierelor din tema părinte, lucru care nu este de dorit din motivele menționate de Otto.
Dacă adaugi aceste două linii de PHP la începutul oricărui fișier pe care dorești să-l modifici în structura temei copil:
<?php
$filepath = str_replace(get_option('template'), get_option('stylesheet'), __FILE__);
if (file_exists($filepath)) {include($filepath); return;}
?>
Desigur, va trebui să faci acest lucru din nou pentru fiecare fișier după actualizarea temei, așa că recomandarea este să ții evidența acestor fișiere și probabil să nu mai actualizezi tema direct, ci să o descarci, să adaugi aceste linii local și să încarci copia actualizată prin FTP.
Poate părea că nu merită efortul, dar ceea ce face este să îți permită să păstrezi fișierele personalizate împreună în structura temei copil, fără a fi suprascrise de actualizările temei. Din nou, va trebui doar să readaugi aceste linii la începutul oricărui fișier părinte pe care dorești să-l suprascrii.
De asemenea, înseamnă că poți elimina copia modificată a fișierului de funcții din tema copil fără a afecta site-ul (de exemplu, pentru a testa împotriva unui fișier actualizat al temei) - deoarece acest lucru va reveni la fișierul original dacă nu este găsită o copie modificată.
(CEM Corectare Tipografică: a înlocuit primul apel get_options
cu get_option
.)
