it-swarm.com.ru

Переопределить функцию в дочерней теме

Я хочу переопределить функцию, которую я унаследовал от родительской темы.

Когда я делаю это в functions.php, я получаю фатальную ошибку, что переопределение невозможно.

Я сделал обходной путь: создал измененное имя функции и скопировал все файлы шаблонов, index.php и т.д. В каталог дочерней темы и переписал вызовы функций. Так что теперь новая функция называется.

Это работает, но игнорирует любые обновления, которые будут иметь родительская тема.

Есть ли лучшее решение для этого?

4
Gergely

Перераспределение функции в дочерней теме работает только тогда, когда функция родительских тем обернута в

 if( !function_exists( 'function_name' )):

состояние. Затем вы можете просто скопировать всю функцию в дочернюю тему и выполнить любые необходимые изменения.

Если функции родительских тем не заключены в этот условный оператор if, и если в функцию не включены фильтры или хуки, лучше будет скопировать функцию в вашу дочернюю тему, переименовать эту функцию, внести изменения, а затем обновите файлы шаблона соответственно, чтобы отразить новую функцию.

8
Pieter Goosen

Вы можете сначала удалить функцию с

remove_filter( 'hook', 'function_name' );

и затем добавьте функцию снова с новым именем и тем же хуком.

Например

    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' );
2
user3635808