Переопределение функции в дочерней теме
Я хочу переопределить функцию, которая наследуется из родительской темы.
Когда я делаю это в functions.php, получаю фатальную ошибку о невозможности переопределения.
Я нашел временное решение: создал функцию с модифицированным именем, скопировал все файлы шаблонов (index.php и др.) в директорию дочерней темы и заменил вызовы функций. Теперь вызывается новая функция.
Это работает, но игнорирует любые обновления родительской темы.
Есть ли лучшее решение этой проблемы?

Переопределение функции в дочерней теме работает только в том случае, если функция родительской темы обёрнута в условие:
if( !function_exists( 'function_name' )):
Тогда вы можете просто скопировать всю функцию в дочернюю тему и внести необходимые изменения.
Если функции родительской темы не обёрнуты в это условное выражение if
, и если в функции не предусмотрены фильтры или хуки, лучшим решением будет скопировать функцию в дочернюю тему, переименовать её, внести изменения, а затем обновить файлы шаблонов, чтобы они использовали новую функцию.

Это именно то, что я сделал. Теперь я вижу, что это ошибка PHP, так как он не позволяет переопределение функций, в отличие от JavaScript.

Информация о хуках и фильтрах WordPress: https://codex.wordpress.org/Plugin_API

Но разве функция не будет перезаписана при обновлении темы? Возможно, я не до конца понял ваши шаги - повторю: я копирую функцию, которую хочу обновить, и переименовываю оригинальную функцию. Затем, когда я обновляю тему, оригинальная функция снова получит своё исходное имя. Я что-то упускаю?

Сначала вы можете удалить функцию с помощью
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 ) {
//здесь какой-то код
return $output;
}
add_filter( 'the_content', 'new_function_name' );
