web-dev-qa-db-ja.com

子テーマ内のすべてのファイルが親をオーバーライドしますか?

Functions.php、PHPテンプレートファイル、子テーマ内のstyle.css以外の他のWPコードファイルが、実際には親ファイル内の同じファイルを上書きするのではないでしょうか。

私は、子テーマをサポートするテーマを持つクライアントと仕事をしていますが、オーバーライドしたい機能をアンロードするためのフックやアクションはありません。アップグレード時に上書きされないようにカスタマイズされたコードを使用して、このオーバーライドを実行するためのクリーンな方法を探しています。

3
emaynard

それは完全にa)あなたが話している関数とテンプレートファイル、およびb)それらの関数がどのように定義されているか、またはテンプレートファイルが親テーマで呼ばれているかに依存します。

親テーマがget_template_part()を使用している場合、あなたは金色です。親テーマがget_stylesheet_directory_uri()またはSTYLESHEETPATHを使用している場合は、注意して上書きできます。親テーマがget_template_directory_uri()またはTEMPLATEPATHを使用している場合、あなたは困難な時間を過ごすことになります。

関数では、親テーマがfunction_exists()条件で関数をラップするならば、子テーマでそれらを宣言することによってそのような関数を単にオーバーライドすることができます。フックを使用すると、remove_actionまたはremove_filterを単純に指定できます。

5
Chip Bennett

通常、すべてのファイルは "上書き"可能です( しかしfunctions.phpファイルではありません )。ルールは次のとおりです。child-Themeが最初にロードされ、次に親テーマがロードされます。

Functions.phpファイル内の関数をオーバーライドしたい場合は、ラップしてください。

if ( ! function_exists('some_function_name') ) { 
    function some_function_name() { /* do stuff */ }
}

そうでなければ、それは不可能です。

1
kaiser