web-dev-qa-db-ja.com

カスタムの内部テーマフォルダは、何らかの方法で子テーマによって上書きできますか?

基本的に、私はUncodeテーマのいくつかのファイルを上書きしようとしています。しかし、これはテーマ固有の質問ではありません。あらゆるテーマに適用できます。 Uncodeテーマには、いくつかのレイアウト要素を含むカスタムディレクトリ'partials'/uncode/partials/)があります。私の子供のテーマでも 'partials'フォルダ(my-child-theme/partials)を作成しましたが、内側のファイルは上書きされていないようです。それは普通ですか? WP docsは、同じ名前のファイルは上書き可能であるべきだと言っていますが、そうではないようです。私は何か悪いことをしていますか?

3
Luca Reghellin

それは完全に親テーマに依存します。 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の市民'としては良くなく、このような機能性のためのかなりむらのあるサポートを持っています。

2
Jacob Peattie

それは非常に良い質問です、テーマディレクトリは時々かなり混乱するかもしれません。

答えはいいえ、WordPressはコアテーマファイルのみを見ます。サブディレクトリはこの一部ではないため、子テーマのサブフォルダは検索されません。できることは、partialsフォルダを含むファイルを含めることです。これにより、子テーマにカスタムのpartialsフォルダが含まれます。

0
weston deboer