パス(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)を返す

※)ファイルが見つからなくてもエラーを返さない

具体例

例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_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( 'ファイル名' ) としておくのが分かりやすいし間違いなさそうです。

⇒「Settings APIの使い方まとめ」に戻る

早期退職して海外で奮闘する JIN のメールマガジン

時間や場所に縛られず稼いだJINが教える

~ 最短で月収10万円稼げるようになる方法 ~

お名前(全角文字)

隣のあの人にも、思わず教えたくなる秘密

配信停止は、いつでもできます

迷惑メールは一切配信されませんので、ご安心くださいね

自らの手で未来を変える力を手に入れる!