web-dev-qa-db-ja.com

子テーマで関数を再宣言する

親テーマから継承した関数を再宣言したいです。

Functions.phpで実行すると、再宣言が不可能な致命的なエラーが発生します。

私は次善策を講じました:修正された関数名を作成し、すべてのテンプレートファイル、index.phpなどを子テーマのディレクトリにコピーし、関数呼び出しを書き直すことです。だから今、新しい関数が呼び出されます。

これは機能しますが、親テーマが持っているであろう更新を無視します。

これに対するより良い解決策はありますか?

4
Gergely

子テーマで関数を再宣言するのは、親テーマの関数が

 if( !function_exists( 'function_name' )):

調子。それからあなたは単に子テーマに完全な機能を単にコピーして、あなたがする必要があるどんな修正でもすることができます。

親テーマの関数がそのif条件文でラップされていない場合、そしてその関数にフィルタやフックが与えられていない場合は、その関数をあなたの子テーマにコピーし、その関数の名前を変更して修正してから新しい機能を反映するようにテンプレートファイルを適宜更新してください。

8
Pieter Goosen

あなたが最初に関数を削除することができます

remove_filter( 'hook', 'function_name' );

その後、新しい名前と同じフックで関数をもう一度追加します。

例えば

    function remove_content_filter() {

       remove_filter( 'the_content', 'function_name' );

    }

    add_action( 'after_setup_theme', 'remove_content_filter' );

    function new_function_name( $output ) {
        //some code here
        return $output;
    }

    add_filter( 'the_content', 'new_function_name' );
2
user3635808