web-dev-qa-db-ja.com

テンプレートを編集せずに機能を変更する

テンプレートファイルに触れずに関数を変更する方法を疑問に思います。

私のテーマでは、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
brandozz

明らかに、あなたがそれを修正したいならば、あなたは何かを編集しなければならないでしょう。だから、あなたの最善の行動はそれ自身の関数ファイルで、子テーマを作成することです。

あなたが変更しようとしている関数にはフィルタフックがないので、あなたが試したように、フィルタは機能しません。あなたができることは、 フッターを表示しているアクション を削除してから、同じフックに新しいアクションを追加することです。このような:

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がロードされている場所が不明なため、add/removeアクションを実行するにはwp_headが早すぎる可能性があります。おそらくwp_footerのほうが優れていますが、それは遅すぎるかもしれません。

1
cjbj