修改函数而不编辑模板

时间:2017-01-11 作者:brandozz

我想知道如何在不接触模板文件的情况下修改函数。

在中的“我的主题”中调用以下函数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\' ) ) . \'&#46;&nbsp;</a>\';
    printf(\'<a href="%1$s">Book Landing Page By %2$s</a>&#46;&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&#46;</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\');
}

1 个回复
最合适的回答,由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 更好,尽管这样做可能太晚了。

相关推荐

使用Apply_Filters()的要点

当我试图开发一个插件时,我试图看到其他插件也能完成我的插件将要实现的功能,然后我看到开发人员在大多数功能中使用该功能apply_filters() 我不明白为什么。下面是一个示例:public static function myFunction() { return apply_filters( \'du/class/method\' array( \'index\' => \'value\', \'index\' =&g