PDA

View Full Version : [Wordpress] Override dei files del theme attivo


robertino_salemi
18-02-2017, 16:17
Buonasera a tutti,
ho necessità di eseguire l'override di una files presente nel theme attivo nel mio sito web.

Premesso che ho già creato il theme-child, riesco ad eseguire l'override dei files presenti nella root del theme padre ma non di quelli presenti nelle sottocartelle.

Mi spiego:
dovrei sovrascrivere un file presente in
themes/theme-padre/lib/inc/template/my_file.php

ho ricreato lo stesso path nel cartella del child-theme:
themes/theme-child/lib/inc/template/my_file.php

Come mai?

Forse per i files presenti nelle sottocartelle non è possibile o la strada da seguire è un'altra?

Grazie.

robertino_salemi
22-02-2017, 15:46
Qualche suggerimento?

daniloandreini
26-02-2017, 15:26
I file del tema
I file del tema che fanno parte della template hierarchy (https://developer.wordpress.org/files/2014/10/template-hierarchy.png) (single.php, page.php, category.php etc.) vanno creati nel child theme e sovrascriverranno correttamente quelli del tema padre.

I file aggiuntivi
Le funzioni (che possono includere anche parti del template) incluse in file come themes/theme-padre/lib/inc/template/my_file.php devono essere sovrascritte creando funzioni con lo stesso nome nel file functions.php del child theme.

Da notare che non è possibile sovrascrivere queste funzioni se il tema padre le dichiara normalmente:
<?php
function mostra_pezzo_di_template()
{
?>
<p>Pezzo di template molto bello</p>
<?php
}
?>
Un tema padre deve dichiararle con questa espressione condizionale:
<?php
if( !function_exists('mostra_pezzo_di_template') ){
function mostra_pezzo_di_template()
{
?>
<p>Pezzo di template molto bello</p>
<?php
}
}
In questo modo le funzioni del tuo child theme non verranno ridichiarate dal tema padre generando l'errore PHP "function is already declared".

?>

robertino_salemi
27-02-2017, 10:33
Ciao Danilo,
grazie per l'ottima spiegazione.

Eventualmente, potrei modificare la dichiarazione della funziona nel theme padre, ma non avrebbe senso... :D