基本的に、私はUncodeテーマのいくつかのファイルを上書きしようとしています。しかし、これはテーマ固有の質問ではありません。あらゆるテーマに適用できます。 Uncodeテーマには、いくつかのレイアウト要素を含むカスタムディレクトリ'partials'
(/uncode/partials/
)があります。私の子供のテーマでも 'partials'フォルダ(my-child-theme/partials
)を作成しましたが、内側のファイルは上書きされていないようです。それは普通ですか? WP docsは、同じ名前のファイルは上書き可能であるべきだと言っていますが、そうではないようです。私は何か悪いことをしていますか?
それは完全に親テーマに依存します。 WordPressは Template Hierarchy 内のテンプレートの子テーマをチェックし、それらが存在する場合はそれらを使用しますが、この階層外の他のファイルをサポートする子テーマによる上書き量を決定するのはテーマ作者次第です。
たとえば、テンプレートのパーツを含める場合、テーマの作成者は次のものを使用できます。
require 'partials/partial.php';
これはうまくいきますが、テーマの作成者が子のテーマをサポートしたい場合は、次のようにします。
get_template_part( 'partials/partial' );
これは、get_template_part()
がpartials/partial.php
の子テーマをチェックし、存在する場合はそれを使用するため、存在しない場合はそれを使用します。それ以外の場合は、親テーマのpartials/partial.php
のコピーにフォールバックします。
4.7.0以降、WordPressはテーマの作成者が他のファイルの子テーマをサポートできるようにするいくつかの機能を追加しました。
get_theme_file_uri()
は子テーマ内のファイルのURLが存在すればそれを返し、そうでなければ親テーマを使います。これにより、テーマは子テーマ内のCSSおよびJSファイルの置き換えをサポートできます。
たとえば、親テーマが次のようなスタイルシートをエンキューするとします。
wp_enqueue_style( 'custom-style', get_theme_file_uri( 'assets/custom.css' ) );
その後、子テーマの作成者は、子テーマにassets/custom.css
を配置するだけで、そのスタイルシートを置き換えることができます。
get_theme_file_path()
は子テーマ内のファイルにpathが存在すればそれを返し、そうでなければ親テーマを使います。これを親テーマで使用すると、子テーマがインクルードされたPHPファイル全体を置き換えることができます。
たとえば、親テーマに次のようなPHPファイルが含まれているとします。
include get_theme_file_path( 'inc/template-tags.php' );
次に、子テーマの作成者は、子テーマにtemplate-tags.php
を配置するだけで、inc/template-tags.php
を置き換えることができます。
そのため、WordPress doは親テーマから任意のファイルを置き換える子テーマをサポートしますが、親テーマの作成者は正しい関数を使用して明示的にサポートする必要があります。
Uncodeは有料のテーマなので、コードを見ることはできませんが、get_template_part()
を使用していないため、子テーマのファイルを置き換えることができないのではないでしょうか。有料のテーマはよく 'WordPressの市民'としては良くなく、このような機能性のためのかなりむらのあるサポートを持っています。
それは非常に良い質問です、テーマディレクトリは時々かなり混乱するかもしれません。
答えはいいえ、WordPressはコアテーマファイルのみを見ます。サブディレクトリはこの一部ではないため、子テーマのサブフォルダは検索されません。できることは、partialsフォルダを含むファイルを含めることです。これにより、子テーマにカスタムのpartialsフォルダが含まれます。