I file PHP del tema child non sovrascrivono i file PHP del tema padre
Ho un file php situato in:
.../wp-content/themes/kallyas-child/pagebuilder/elements/TH_TeamBox/TH_TeamBox.php
Sto cercando di utilizzare il file sopra indicato per sovrascrivere il file TH_TeamBox.php del tema padre che si trova qui:
.../wp-content/themes/kallyas/pagebuilder/elements/TH_TeamBox/TH_TeamBox.php
Il mio tema child è attivo e ho creato il percorso del file nel mio tema child per replicare quello del tema padre. Pensavo che facendo così sarei stato in grado di modificare i file PHP a mio piacimento nel tema child senza perdere le modifiche quando aggiorno il tema padre.
Sviluppo da un po' di tempo, ma come potete vedere sono relativamente nuovo su WordPress. Qualsiasi indicazione sul perché il file .php del tema child non stia sovrascrivendo il file .php del tema padre sarebbe molto apprezzata. Sarei felice di fornire qualsiasi altra informazione di cui potreste aver bisogno per aiutarmi, grazie! : )

I temi child possono sovrascrivere i template, non semplicemente file PHP arbitrari.
In WordPress, un tema è composto da una serie di file PHP utilizzati come Template. Puoi trovare un elenco di questi file nella Gerarchia dei Template.
Quei specifici file template possono essere sovrascritti con dei nuovi, ma a meno che il tema genitore non abbia qualche mezzo speciale per sovrascrivere altri file, allora i file semplicemente inclusi dal genitore come parte di una struttura di supporto o come librerie per un pezzo di codice di un pagebuilder non possono essere sovrascritti in quel modo.

Non è quello che volevo sentire, ma grazie per l'informazione. Lo apprezzo

Qui sono menzionate alcune utili funzioni che aiutano a sovrascrivere i file del tema genitore. (È comunque necessario un piccolo cambiamento nel file del tema genitore. Per quanto ne so, è impossibile evitarlo al 100%.) Dai un'occhiata a queste: locate_template()
, get_theme_file_path()
.

La soluzione è spostare le modifiche necessarie nel file functions.php del tuo child theme.
Se si tratta di una funzione, solitamente ci sarà un'istruzione if che verifica se è già dichiarata, in questo caso puoi copiare la funzione in functions.php con lo stesso nome e apportare le modifiche necessarie, avrà priorità rispetto agli altri file del tema. Nel caso in cui la funzione sia stata dichiarata senza un'istruzione if, allora devi cambiarle il nome in functions.php, trovare il file template dove la funzione viene chiamata, copiarlo nel tuo child theme e modificare la chiamata alla funzione al suo interno.
Se si tratta di un widget, copia l'intera dichiarazione della classe in functions.php, cambia il suo nome e apporta le altre modifiche. Assicurati anche di registrare il nuovo widget e lo troverai disponibile nell'area widget con il nuovo nome e le modifiche apportate.

Grazie per il tuo contributo. Al momento della domanda non stavo cercando come sovrascrivere una funzione, ma piuttosto come sovrascrivere un file. Inoltre, la risposta corretta è stata fornita da Otto. A meno che non ci sia una funzione di template personalizzata che puoi filtrare (come wc_get_template di WooCommerce), solo i file template principali (header.php, footer.php, page.php, ecc.) possono essere sovrascritti.

Ho una soluzione alternativa per te che potrebbe essere migliore rispetto a modificare direttamente i file del tema genitore, cosa che come ha detto Otto non è auspicabile per vari motivi.
Se aggiungi queste due righe di PHP all'inizio di qualsiasi file che vuoi modificare nella struttura della directory del tuo tema child:
<?php
$filepath = str_replace(get_option('template'), get_option('stylesheet'), __FILE__);
if (file_exists($filepath)) {include($filepath); return;}
?>
Ovviamente dovrai ripetere questa operazione per ogni file che modifichi dopo ogni aggiornamento del tema, quindi ti consiglio di prendere nota di questi file e probabilmente di non aggiornare più il tema direttamente, ma invece scaricarlo, aggiungere queste righe localmente e poi caricare la copia aggiornata via FTP.
Potrebbe sembrare una seccatura non valida, ma ciò che fa è permetterti di mantenere i tuoi file modificati insieme nella struttura del tema child senza che vengano sovrascritti dagli aggiornamenti del tema. Dovrai solo riaggiungere queste righe in cima a ogni file genitore che vuoi continuare a sovrascrivere.
Significa anche che potresti rimuovere la copia modificata del file functions del tema child senza rompere il sito (ad esempio per testare contro un file del tema aggiornato) - poiché in questo caso verrà utilizzato il file originale se non viene trovata una copia modificata.
(Correzione di CEM Typo: sostituita la prima chiamata get_options
con get_option
.)
