我想知道如何在不接触模板文件的情况下修改函数。
在中的“我的主题”中调用以下函数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 © \', \'book-landing-page\' );
echo esc_html( date_i18n( \'Y\' ) );
echo \' <a href="\' . esc_url( home_url( \'/\' ) ) . \'">\' . esc_html( get_bloginfo( \'name\' ) ) . \'. </a>\';
printf(\'<a href="%1$s">Book Landing Page By %2$s</a>. \', 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\');
}
最合适的回答,由SO网友:cjbj 整理而成
Ovious,如果您想修改某些内容,则必须对其进行编辑。因此,最好的做法是创建一个子主题,并使用它自己的函数文件。
您尝试的过滤器无法工作,因为您尝试修改的函数中没有过滤器挂钩。你能做的是remove the action 即打印页脚,然后在同一挂钩上添加新操作。像这样:
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
太早,无法执行添加/删除操作。可能
wp_footer
更好,尽管这样做可能太晚了。