web-dev-qa-db-ja.com

子テーマに配置されたファイルは含まれていません

"Includes"フォルダーの親テーマにあるtheme.phpファイルを変更し、 "Includes"フォルダーの子テーマにも配置しましたが、変更が含まれていません。 WordPressは、親テーマフォルダーに配置されたファイルのみを読み取ります。これはなぜですか?ファイルが子テーマフォルダーにある場合、変更内容はどのように含める必要がありますか?または、方法functions.phpのinclude/theme.phpから関数をオーバーライドできますか?再宣言エラーがあるため、関数をオーバーライドできません。

編集7.05.2020

@JacobPeattie-どうもありがとう。私は読みました。理解できたか分からない。私の英語はまだあまり上手ではありません。私はfunctions.phpにそう書いています:

if ( ! function_exists( 'bimber_capture_entry_featured_media' ) ) :
function bimber_capture_entry_featured_media_my_modifications( $args ) {

//function code with my modifications

}
endif;

うまく追加されましたが、機能しません。

多分それは有用な情報でしょう:

  1. ファイルtheme.phpは、parentTheme/includesフォルダーのfunctions.phpファイルに次のように追加されます:require_once BIMBER_INCLUDES_DIR . 'theme.php';

  2. 関数は別の関数の「エコー」によって呼び出されます。

ここにphpファイルがあります:

1
reti

子テーマのbimber_capture_entry_featured_mediaを置き換えたい。あなたが私たちに与えたtheme.phpファイルでは、これがbimber_render_entry_featured_mediaから1つの場所でのみ呼び出され、呼び出しがフィルターにラップされていることがわかります:

if ( apply_filters( 'bimber_render_entry_featured_media', true, $args ) ) {
    echo bimber_capture_entry_featured_media( $args );
}

フィルターからfalseを返すと、デフォルトコードの呼び出しがキャンセルされます。それが本当であると仮定すると、フィルターガードなしでこの関数を呼び出すものは他にないので、代わりにあなたができることは

  1. bimber_render_entry_featured_mediaフィルターを実装します。これを実装するものが他にある場合は低い優先度を選択しますが、これらのファイルには何も表示されません
  2. フィルターで置換bimber_capture_entry_featured_media_my_modificationsを呼び出し、結果をエコーし​​ます
  3. 元の変更されていないコードへの呼び出しをキャンセルするには、フィルターからfalseを返します。

例えば(未試験)

function bimber_render_entry_featured_media_filter_my_modifications( $flag, $args ) {
    if ($flag) {
        echo bimber_capture_entry_featured_media_my_modifications( $args );
    }
    return false;
}
add_filter( 'bimber_render_entry_featured_media',
            'bimber_render_entry_featured_media_filter_my_modifications', 10, 2 );

ただし、元のメソッドにもたくさんのフックがあるため、実行しようとしていることに応じて、メソッドを完全にオーバーライドするのではなく、それらを使用して動作を変更できる場合があります。

2
Rup