Ridefinire una funzione in un child theme

24 mag 2014, 12:02:47
Visualizzazioni: 14.3K
Voti: 7

Voglio ridefinire una funzione che ho ereditato dal tema genitore.

Quando lo faccio in functions.php, ottengo un errore fatale che indica che la ridefinizione non è possibile.

Ho trovato una soluzione alternativa: creare un nome di funzione modificato e copiare tutti i file template, index.php ecc. nella directory del child theme e riscrivere le chiamate alla funzione. Così ora viene chiamata la nuova funzione.

Questo funziona ma ignora eventuali aggiornamenti che avrebbe il tema genitore.

Esiste una soluzione migliore per questo problema?

0
Tutte le risposte alla domanda 2
3

Ridefinire una funzione in un child theme funziona solo quando la funzione del tema genitore è racchiusa in una condizione

if( !function_exists( 'function_name' )):

. In questo caso, puoi semplicemente copiare l'intera funzione nel child theme e apportare le modifiche necessarie.

Se le funzioni del tema genitore non sono racchiuse in questa istruzione condizionale if, e se non sono forniti filtri o hook nella funzione, sarà meglio copiare la funzione nel tuo child theme, rinominare quella funzione, apportare le tue modifiche e poi aggiornare i tuoi file template di conseguenza per riflettere la nuova funzione.

24 mag 2014 12:14:44
Commenti

È esattamente quello che ho fatto. Ora capisco che è un limite di PHP in quanto non permette la ridefinizione delle funzioni come invece fa JavaScript.

Gergely Gergely
24 mag 2014 12:22:25

Informazioni sugli hook/filter di WordPress: https://codex.wordpress.org/Plugin_API

Jonathan Hult Jonathan Hult
26 set 2017 00:34:30

Ma la funzione non verrà sovrascritta da un aggiornamento del tema? Forse non ho capito bene i passaggi che hai detto - ripeto: copio la funzione che voglio modificare e rinomino la funzione originale. Poi, quando aggiorno il tema, la funzione originale verrà rinominata nuovamente con il suo nome originario. Mi sfugge qualcosa?

Victor Victor
27 ago 2020 12:05:34
1

Puoi prima rimuovere la funzione con

remove_filter( 'hook', 'function_name' );

e poi aggiungere nuovamente la funzione con il nuovo nome e lo stesso hook.

Ad esempio

    function remove_content_filter() {

       remove_filter( 'the_content', 'function_name' );

    }

    add_action( 'after_setup_theme', 'remove_content_filter' );

    function new_function_name( $output ) {
        //qui del codice
        return $output;
    }

    add_filter( 'the_content', 'new_function_name' );
24 mag 2014 13:22:56
Commenti

Credo che tu possa farlo solo se la funzione è stata aggiunta al filtro in primo luogo. Altrimenti, se si tratta di una funzione normale (non pluggable o di altro tipo), allora non puoi farlo. Ho ragione?

Victor Victor
27 ago 2020 12:10:43