get_stylesheet_directory_uri()とget_template_directory_uri()の挙動の違い

更新

WordPressでテーマのディレクトリのURLを取得したいときがあります。具体的には画像のパスが必要なときなんかですね。WordPressにはテーマのディレクトリのURLを出力してくれる関数が用意されていて、私はこれまでget_template_directory_uri()を使っていました。

<img src="<?php echo esc_url( get_template_directory_uri() ); ?>/img/example.png" alt="" />

/*出力結果*/
<img src="https://ドメイン名/wp-content/themes/テーマ名/img/example.png" alt="" />

ところで、get_template_directory_uri()には似た機能をもつ別の関数get_stylesheet_directory_uri()があります。先ほどの例の場合、親テーマで使用された場合はどちらの関数を使用しても同じ結果になります。

今まで特に考えずget_template_directory_uri()を使用してきましたが、少し気になったので両者の挙動の違いを調べました。

get_stylesheet_directory_uri()はテーマのディレクトリのURLを返す

WordPressの関数レファレンスによるとget_stylesheet_directory_uri()の機能は以下の通りです。

テーマまたは子テーマのスタイルシートディレクトリの URI を取得する。

つまりそのテーマのディレクトリのURLを返すということですね。

get_template_directory_uri()はテーマのディレクトリのURLを返すが、子テーマで使用された場合親テーマのディレクトリのURLを返す

続いてget_template_directory_uri()です。

関数レファレンスによるとget_template_directory_uri()の機能は以下の通りです。

有効化しているテンプレートディレクトリの URI を取得する。

get_stylesheet_directory_uri()同様、テーマのディレクトリのURLを返すということです。

ただし、以下の記述もありました。

子テーマを使用している場合、親テーマのディレクトリの URI を返します。

この点がget_stylesheet_directory_uri()との違いです。

子テーマにおいては、子テーマ自身のディレクトリのURLを取得したい場合はget_stylesheet_directory_uri()を使用します。一方、親テーマのディレクトリのURLを取得したい場合はget_template_directory_uri()を使用します。

子テーマでは使い分けが必要、親テーマではどちらでも結果は同じ

まとめると、両者の挙動は以下の通りです。

get_stylesheet_directory_uri():テーマのディレクトリのURLを返す。

get_template_directory_uri():テーマのディレクトリのURLを返す。子テーマで使用された場合、親テーマのディレクトリのURLを返す。

子テーマの開発では両者を区別して使用する必要があります。一方、親テーマの開発や、そもそも子テーマがつくられることを想定していない開発ではどちらを使用しても得られる結果は同じです。

get_theme_file_uri()get_parent_theme_file_uri()

よく調べてみると、テーマのディレクトリのURLを取得する関数が他にもありました。以下の2つです。

get_theme_file_uri()
get_parent_theme_file_uri()

両者ともバージョン4.7から使用可能です。自身のディレクトリのURLが欲しいときは前者を、親テーマのディレクトリのURLが欲しいときは後者を使用します。

実装の中身を見てみるとget_stylesheet_directory_uri()get_template_directory_uri()が使用されていました。名前が違うだけで、機能的には前出の関数と変わらないみたいです。

こちらの関数の方が関数名と機能が一致していてわかりやすいですね。