Изменение функции без редактирования шаблона

Мне интересно, как я могу изменить функцию, не касаясь файла шаблона.

В моей теме в файле template-functions.php вызывается следующая функция:

  if( ! function_exists( 'book_landing_page_footer_credit' ) ) : /** * Footer Credits */ function book_landing_page_footer_credit(){ echo '<div class="site-info">'; esc_html_e( 'Copyright &copy;&nbsp;', 'book-landing-page' ); echo esc_html( date_i18n( 'Y' ) ); echo ' <a href="' . esc_url( home_url( '/' ) ) . '">' . esc_html( get_bloginfo( 'name' ) ) . '.&nbsp;</a>'; printf('<a href="%1$s">Book Landing Page By %2$s</a>.&nbsp;', esc_url( __( 'http://raratheme.com/wordpress-themes/book-landing-page/', 'book-landing-page' ) ), 'Rara Theme'); printf( esc_html__( 'Powered by %s', 'book-landing-page' ), '<a href="'. esc_url( __( 'https://wordpress.org/', 'book-landing-page' ) ) .'" target="_blank">WordPress.</a>' ); echo '</div>'; } endif; 

На что ссылается файл template-hooks.php например:

 add_action( 'book_landing_page_footer', 'book_landing_page_footer_credit', 40 ); 

Мой вопрос в том, как я могу изменить эту функцию, не касаясь файлов шаблонов?

Я пробовал следующее, но это не работает:

 if (!function_exists('new_credit')) { function new_credit() { echo 'This is my site'; } add_filter('book_landing_page_footer_credit', 'new_credit'); } 

Очевидно, вам придется что-то редактировать, если вы хотите его изменить. Итак, ваш лучший способ действий – создать дочернюю тему с собственным файлом функции.

Фильтр, как вы пробовали, не будет работать, потому что в функции, которую вы пытаетесь изменить, нет фильтра. Что вы можете сделать, это удалить действие , которое печатает нижний колонтитул, а затем добавить новое действие на том же самом крючке. Как это:

 add_action ('wp_head','wpse252108_remove_add_action'); function wpse252108_remove_add_action() { remove_action ('book_landing_page_footer', 'book_landing_page_footer_credit', 40); add_action ('book_landing_page_footer', 'new_credit', 40) } 

Поскольку неясно, где в потоке template-hooks.php место, где добавлено исходное действие, возможно, что wp_head слишком рано делать действие add / remove. Возможно, wp_footer лучше, хотя, в свою очередь, может быть слишком поздно.