Redeclare uma função em um tema filho

3

Eu quero redeclarar uma função que herdei do tema pai.

Quando faço isso em functions.php, recebo um erro fatal de que a redeclaração não é possível.

Eu fiz uma solução: criando um nome de função modificado e copiando todos os arquivos de modelo, index.php etc. para o diretório do tema filho e reescrevendo as chamadas de função. Então agora a nova função é chamada.

Isso funciona, mas ignora as atualizações que o tema pai teria.

Existe uma solução melhor para isso?

    
por Gergely 24.05.2014 / 11:02

2 respostas

8

Redeclarar uma função em um tema filho só funciona quando a função dos temas pai é agrupada em

 if( !function_exists( 'function_name' )):
condição

. Então você pode simplesmente copiar a função completa para o tema filho e fazer as modificações necessárias.

Se as funções dos temas pai não estiverem agrupadas nessa instrução condicional if , e se nenhum filtro ou ganchos forem fornecidos na função, será melhor copiar a função para seu tema filho, renomear essa função, faça suas modificações e atualize seus arquivos de modelo de acordo para refletir a nova função.

    
por Pieter Goosen 24.05.2014 / 11:14
2

Você pode primeiro remover a função com

remove_filter( 'hook', 'function_name' );

e, em seguida, adicione a função novamente com o novo nome e o mesmo gancho.

Por exemplo

    function remove_content_filter() {

       remove_filter( 'the_content', 'function_name' );

    }

    add_action( 'after_setup_theme', 'remove_content_filter' );

    function new_function_name( $output ) {
        //some code here
        return $output;
    }

    add_filter( 'the_content', 'new_function_name' );
    
por user3635808 24.05.2014 / 12:22