I file PHP del tema child non sovrascrivono i file PHP del tema padre

7 apr 2016, 01:30:01
Visualizzazioni: 26.9K
Voti: 12

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! : )

3
Commenti

Difficile da sapere senza conoscere il contenuto del file. La mia ipotesi è che quel file sia o sia racchiuso da una classe PHP. Se è così, puoi provare a estendere la classe. Se non funziona, puoi sperimentare con add_action, remove_action e le priorità, ma molto dipende da come è organizzato all'interno del tema genitore.

Luis Sanz Luis Sanz
7 apr 2016 01:47:14

Non riuscivo a immaginare che l'estensione della classe potesse funzionare. Se la classe C (figlia) estende P (genitore), allora un oggetto di tipo C avrebbe tutto da P ma P non avrebbe nulla da C e il tema utilizzerebbe P per impostazione predefinita anche quando il tema figlio è attivo. Darò un'occhiata agli action hook. Grazie per aver risposto al mio thread, lo apprezzo molto.

domdambrogia domdambrogia
19 apr 2016 18:41:05

Potrebbe essere un problema con i permessi dei file. Assicurati che tutti i permessi dei file siano impostati come necessario per consentire al processo del server di leggerli.

Flimm Flimm
3 dic 2024 12:08:15
Tutte le risposte alla domanda 4
2
18

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.

7 apr 2016 01:34:35
Commenti

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

domdambrogia domdambrogia
19 apr 2016 18:34:09

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().

Viktor Borítás Viktor Borítás
13 ott 2020 20:41:42
1

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.

1 apr 2018 15:58:30
Commenti

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.

domdambrogia domdambrogia
1 apr 2018 21:17:05
0

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.)

7 apr 2016 10:51:14
1

Ho utilizzato un altro approccio: nel file functions.php del mio child theme, ho sovrascritto il file target del tema padre che desidero sovrascrivere.

require(get_parent_theme_file_path() . "-child/include/header-content.php");
30 mag 2023 19:30:34
Commenti

Non sembra funzionare se il file header-content.php include una riga come class Thing extends Thing_Base {

Jay Jay
3 ago 2024 07:41:40