web-dev-qa-db-ja.com

子テーマでfunctions.phpをオーバーライドするにはどうすればいいですか?

私はテーマを持っていて、functions.phpファイルでその特定の部分の動作をオーバーライドする必要があります。ここでのベストプラクティスは、カスタムのfunctions.phpを配置することによってこれを子テーマで行うことです。これは元のファイルの一部です。

function mytheme_setup() {
    ...
    add_image_size( 'mytheme-l-thumbs' , 750 , 423 , true);
    add_image_size( 'mytheme-m-thumbs' , 555 , 313 , true);
    add_image_size( 'mytheme-s-thumbs' , 450 , 254 , true);
    add_image_size( 'mytheme-square-thumbs' , 750 , 750 , true);
    add_image_size( 'mytheme-nocrop-thumbs' , 750 , 1500 , false);

}

add_action( 'after_setup_theme', 'mytheme_setup' );

そして私は自分の子供のテーマでcropをfalseに設定することでそれぞれのadd_image_sizeをオーバーライドしたいと思います。私は子のテーマに関数をコピー&ペーストしてみましたが、このエラーになりました。

88行目の/themes/mytheme/functions.phpにmytheme_setup()(以前は/themes/mytheme-child/functions.php:11で宣言されていました)を再宣言することはできません

どうすればそれができますか?

3
ReynierPM

関数がフックされると、子テーマでそれを変更するのは簡単です。あなたがする必要があるのは

  • 元のコールバック関数を削除

  • この関数をあなたの子供のテーマにコピーして名前を変更してください。

  • 必要に応じてカスタマイズを行います

  • コールバック機能を再フックする

あなたは以下を試すことができます:

// Remove the callback function from the hook
remove_action( 'after_setup_theme', 'mytheme_setup' );

// Copy the function, rename and do what you need
function my_new_callback()
{
    // Modify what you need
}

// Rehook your custom callback
add_action( 'after_setup_theme', 'my_new_callback' );
3
Pieter Goosen