Redefiniți o funcție într-un child theme

24 mai 2014, 12:02:47
Vizualizări: 14.3K
Voturi: 7

Vreau să redefinesc o funcție pe care am moștenit-o din tema părinte.

Când încerc să fac asta în functions.php, primesc o eroare fatală care spune că redeclararea nu este posibilă.

Am găsit o soluție temporară: am creat un nume modificat pentru funcție și am copiat toate fișierele de șablon, index.php etc. în directorul child theme-ului, apoi am rescris apelurile funcției. Acum noua funcție este apelată.

Această soluție funcționează, dar ignoră orice actualizări pe care le-ar putea avea tema părinte.

Există o soluție mai bună pentru această problemă?

0
Toate răspunsurile la întrebare 2
3

Redefinirea unei funcții într-un temă copil funcționează doar atunci când funcția din tema părinte este încadrată într-o condiție

if( !function_exists( 'nume_functie' )):

. În acest caz, puteți pur și simplu copia întreaga funcție în tema copil și faceți modificările necesare.

Dacă funcțiile din tema părinte nu sunt încadrate în acea condiție if, iar dacă nu sunt furnizate filtre sau hook-uri în funcție, cel mai bine este să copiați funcția în tema copil, să o redenumiți, să faceți modificările necesare și apoi să actualizați fișierele de șablon în consecință pentru a reflecta noua funcție.

24 mai 2014 12:14:44
Comentarii

Exact asta am făcut. Acum îmi dau seama că este o problemă a php, deoarece nu permite redeclararea așa cum face javascript.

Gergely Gergely
24 mai 2014 12:22:25

Informații despre hook-uri/filtre în WordPress: https://codex.wordpress.org/Plugin_API

Jonathan Hult Jonathan Hult
26 sept. 2017 00:34:30

Dar funcția nu va fi suprascrisă de o actualizare a temei? Poate nu înțeleg pașii pe care i-ai menționat - voi repeta: copiez funcția pe care vreau să o actualizez și redenumesc funcția originală. Apoi, când actualizez tema, funcția originală va fi redenumită din nou la numele ei inițial. Omiteam ceva?

Victor Victor
27 aug. 2020 12:05:34
1

Puteți întâi să eliminați funcția cu

remove_filter( 'hook', 'function_name' );

și apoi să adăugați din nou funcția cu noul nume și același hook.

De exemplu

    function remove_content_filter() {

       remove_filter( 'the_content', 'function_name' );

    }

    add_action( 'after_setup_theme', 'remove_content_filter' );

    function new_function_name( $output ) {
        //aici poți adăuga codul
        return $output;
    }

    add_filter( 'the_content', 'new_function_name' );
24 mai 2014 13:22:56
Comentarii

Cred că poți face asta doar dacă funcția a fost adăugată inițial în filtru. Altfel, dacă este o funcție normală (nu pluggable sau de alt tip), atunci nu poți face asta. Am dreptate?

Victor Victor
27 aug. 2020 12:10:43