パス(URL)を取得する場合、親テーマだから子テーマだからと場合分けするのは面倒で、パス取得で同じ関数がないかと探したら以下がそれ。
get_theme_file_uri()
関数リファレンス:get_theme_file_uri()(ワードプレス公式)
- 1)get_theme_file_uri() だけの場合- 1-1)親テーマが有効な場合:親テーマのテーマフォルダーまでのパス(URL)を返す
- 1-2)子テーマが有効な場合:子テーマのテーマフォルダーまでのパス(URL)を返す
 
- 2)ファイル指定されている場合:get_theme_file_uri( 'ファイル' )- 2-1)親テーマが有効な場合:
 親テーマのファイルとして、ファイルまでのパス(URL)を返す
- 2-2)子テーマが有効な場合:ファイルあり
 子テーマでファイルが見つかれば、
 子テーマのファイルまでのパス(URL)を返す
- 2-3)子テーマが有効な場合:ファイルなし
 子テーマでファイルが見つからない場合は、
 親テーマのファイルとして、ファイルまでのパス(URL)を返す
 
- 2-1)親テーマが有効な場合:
※)ファイルが見つからなくてもエラーを返さない
具体例
例1)親テーマの場合:
テーマフォルダのすぐ下にある「test1.css」のパス取得
親テーマフォルダー:cocoon-master 
 ├ images 
 ├ css 
 ├ plugins 
 ├ index.php 
 ├ functions.php 
 ├ test1.css 
 ├ ・・・・
get_theme_file_uri( 'test1.css' )
例2)子テーマの場合:
テーマフォルダ下の「test-css」内にある「test2.css」のパス取得
 子テーマフォルダー:cocoon-child-master
 ├ skins
 ├ test-css
   ├ test2.css
 ├ editor-style.css
 ├ functions.php
 ├ ・・・・
get_theme_file_uri( '/test-css/test2.css' )
動作確認
以下のようにして、具体的な動作を見てみた。
・親テーマフォルダーに、functions.php と同じ階層に test1.css を置いた
・子テーマフォルダーに、functions.php と同じ階層に test2.css を置いた
※)テーマは Cocoon を使用
親テーマフォルダー:cocoon-master 
 ├ images 
 ├ css 
 ├ plugins 
 ├ index.php 
 ├ functions.php 
 ├ test1.css 
 ├ ・・・・
子テーマフォルダー:cocoon-child-master 
 ├ skins 
 ├ tmp-users 
 ├ editor-style.css 
 ├ functions.php 
 ├ test2.css 
 ├ ・・・・
親テーマ、子テーマの各々のfunctions.phpに以下コードを書いて表示させてみる。
1) get_theme_file_uri();
2) get_theme_file_uri(‘test1.css‘);
3) get_theme_file_uri(‘test2.css‘);
4) get_theme_file_uri(‘zettainai.css’);
※)zettainai.css は存在しないファイル
【結果】
| 親テーマ | 子テーマ | 結果 | 
| 有効化 | なし | functions.php(親テーマ) 1) http://example.com/wp-content/themes/cocoon-master 2) http://example.com/wp-content/themes/cocoon-master/test1.css 3) http://example.com/wp-content/themes/cocoon-master/test2.css 4) http://example.com/wp-content/themes/cocoon-master/zettainai.css | 
| 有効化 | あり (無効) | functions.php(親テーマ) 1) http://example.com/wp-content/themes/cocoon-master 2) http://example.com/wp-content/themes/cocoon-master/test1.css 3) http://example.com/wp-content/themes/cocoon-master/test2.css 4) http://example.com/wp-content/themes/cocoon-master/zettainai.css | 
| - | 有効化 | functions.php(子テーマ) 1) http://example.com/wp-content/themes/cocoon-child-master 2) http://example.com/wp-content/themes/cocoon-master/test1.css 3) http://example.com/wp-content/themes/cocoon-child-master/test2.css 4) http://example.com/wp-content/themes/cocoon-master/zettainai.css functions.php(親テーマ) 1) http://example.com/wp-content/themes/cocoon-child-master 2) http://example.com/wp-content/themes/cocoon-master/test1.css 3) http://example.com/wp-content/themes/cocoon-child-master/test2.css 4) http://example.com/wp-content/themes/cocoon-master/zettainai.css | 
- 親テーマが有効な場合:- 子テーマがインストールされててもされてなくても、親テーマのパスを返す
 
- 子テーマが有効な場合:- get_theme_file_uri() は親テーマで使われても子テーマで使われても
 子テーマのパスを返す
- get_theme_file_uri( 'ファイル' ) とファイル指定すると、まず子テーマ内でファイルを探す。
 見つかれば子テーマのパスで返し、
 見つからなければ親テーマのパスで返す。
 (親テーマ、子テーマ、どちらにも指定のファイルが存在しない場合は、親テーマのパスで返す)
 
- get_theme_file_uri() は親テーマで使われても子テーマで使われても
注意が必要そうなのは、
get_template_directory_uri() (親テーマノパスを取得)や get_stylesheet_directory_uri() (子テーマのパスを取得)を使ってファイルのパスを取得する時と同じような形でget_theme_file_uri().'ファイル名'としてパスを取得する場合。
関数リファレンス/get template directory uri
関数リファレンス/get stylesheet directory uri
get_theme_file_uri() は子テーマが有効化されている場合、必ず子テーマフォルダーまでのパスを返すので、親テーマ内で親テーマにしかないファイルを参照する場合、
get_template_directory_uri().'ファイル名' を使う必要がある、となるでしょうか。
というか、そうした使い方をせず、get_theme_file_uri( 'ファイル名' ) としておくのが分かりやすいし間違いなさそうです。



コメント